2017-02-17 384 views
0

我使用springframework -RestTemplate, 爲了獲取請求,並將xml響應轉換爲java對象。 手術後:RestTemplate.exchange, 我得到了以下異常:獲取HttpMessageNotReadableException異常使用Spring時 - RestTemplate

org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Can not instantiate value of type [simple type, class Order] from 

從XML客戶端的響應,我把它添加到標題:

headers.setAccept(Arrays.asList(MediaType.APPLICATION_XML)); 

那麼,爲什麼它試圖將響應解析爲JSON? 我該如何解決?

謝謝!

+0

你可能不具備XML要求的MessageConverter轉換成對象 – Redlab

+0

嗨, 我試圖添加: restTemplate.getMessageConverters()。add(new MappingJackson2XmlHttpMessageConverter()); 但仍然得到這個例外。我應該使用哪種messeageConverter? 謝謝 –

+0

您是否還將Jackson2添加到類路徑中? – Redlab

回答

1

最常見的原因是您正在獲取一些不符合模型中定義的反序列化規則的XML(或者它可能是格式錯誤的XML)。

其他可能的原因是您的RestTemplate缺少能夠處理XML轉換的消息轉換器。默認情況下,Spring Boot會配置Jaxb2RootElementHttpMessageConverter,但只有在類路徑中有JAXB2時,才應該檢查此項依賴項是否適用於您的項目。

您也可以打印出消息轉換器在你的RestTemplate登記,他們接受的媒體類型,用下面的代碼:

for (HttpMessageConverter<?> converter : restTemplate.getMessageConverters()) { 
    System.out.println("Converter: " + converter.getClass().getSimpleName() + ", supports: " 
       + converter.getSupportedMediaTypes().toString()); 
} 
+0

您好感謝,我 打印轉換器,以及Jaxb2RootElementHttpMessageConverter就是其中之一。 但我仍然得到這個例外。 有什麼方法可以提示轉換器使用的彈簧? –

+0

如果您有一個支持XML格式的消息轉換器,您可以驗證服務器是否正在發送適當的內容類型標題?像'application/xml',而不是'text/plain'或'text/html'。 – aaguilera

相關問題