Cannot deserialize instance of java.lang.String out of START_ARRAY/START_OBJECT token,RestTemplate小坑
阿新 • • 發佈:2019-01-09
最近在寫專案的時候使用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;
}