1. 程式人生 > >Cannot deserialize instance of java.lang.String out of START_ARRAY/START_OBJECT token,RestTemplate小坑

Cannot deserialize instance of java.lang.String out of START_ARRAY/START_OBJECT token,RestTemplate小坑

最近在寫專案的時候使用RestTemplate遇到一點下問題,
當我自定義了轉化器之後,再次使用restTemplate傳送請求,轉換字串,報“Cannot deserialize instance of java.lang.String out of START_ARRAY/START_OBJECT token“錯誤。
簡單檢視原始碼之後發現是因為轉化器順序問題,在此寫下來,希望能幫到遇到同樣問題的猿們。
詳情看下面程式碼。

@Bean
public RestTemplate restTemplate() {
    RestTemplate restTemplate = new
RestTemplate(simpleClientHttpRequestFactory()); List<HttpMessageConverter<?>> converters = new ArrayList<>(); //轉化器順序有變動可能導致 Can not deserialize instance of java.lang.String out of START_ARRAY token //Could not read document: Can not deserialize instance of java.lang.String out of START_OBJECT token
//可以根據mediaType指定每個轉化器需要的型別 //部分轉化器預設匹配全部的MediaType 詳見restTemplate的doWithRequest()方法和轉化器的 canRead()/canWrite()方 //法 converters.add(new ByteArrayHttpMessageConverter()); converters.add(new StringHttpMessageConverter(Charset.forName("UTF-8"))); converters.add(new ResourceHttpMessageConverter()); converters.add(new
SourceHttpMessageConverter<>()); converters.add(new AllEncompassingFormHttpMessageConverter()); converters.add(new MappingJackson2XmlHttpMessageConverter()); converters.add(new MappingJackson2HttpMessageConverter()); restTemplate.setMessageConverters(converters); return restTemplate; }