使用 spring,使用以下代码:
List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
for(HttpMessageConverter httpMessageConverter : messageConverters){
System.out.println(httpMessageConverter);
}
ResponseEntity<ProductList> productList = restTemplate.getForEntity(productDataUrl,ProductList.class);
我得到
org.springframework.http.converter.ByteArrayHttpMessageConverter@34649ee4
org.springframework.http.converter.StringHttpMessageConverter@39fba59b
org.springframework.http.converter.ResourceHttpMessageConverter@383580da
org.springframework.http.converter.xml.SourceHttpMessageConverter@409e850a
org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter@673074aa
org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter@1e3b79d3
org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@52bb1b26
org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class com.mycopmany.ProductList] and content type [text/html;charset=UTF-8]
pojo 的一个片段:
@XmlRootElement(name="TheProductList")
public class ProductList {
@XmlElement(required = true, name = "date")
private LocalDate importDate;
原文由 NimChimpsky 发布,翻译遵循 CC BY-SA 4.0 许可协议
From a Spring point of view, none of the
HttpMessageConverter
instances registered with theRestTemplate
can converttext/html
content to aProductList
object.感兴趣的方法是HttpMessageConverter#canRead(Class, MediaType)
。以上所有的实现返回false
,包括Jaxb2RootElementHttpMessageConverter
。由于没有
HttpMessageConverter
可以读取您的 HTTP 响应,因此处理失败并出现异常。If you can control the server response, modify it to set the
Content-type
toapplication/xml
,text/xml
, or something matchingapplication/*+xml
.如果您不控制服务器响应,则需要编写并注册自己的
HttpMessageConverter
(可以扩展 Spring 类,请参阅AbstractXmlHttpMessageConverter
及其子类)读取并转换text/html
。