没有为响应类型找到合适的HttpMessageConverter [英] no suitable HttpMessageConverter found for response type

查看:98
本文介绍了没有为响应类型找到合适的HttpMessageConverter的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用spring,使用以下代码:

Using spring, with this code :

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;


推荐答案

从Spring的角度来看,没有 HttpMessageConverter 使用 RestTemplate 注册的实例可以转换 text / html 内容到 ProductList 对象。感兴趣的方法是 HttpMessageConverter#canRead(Class,MediaType)。以上所有的实现返回 false ,包括 Jaxb2RootElementHttpMessageConverter

From a Spring point of view, none of the HttpMessageConverter instances registered with the RestTemplate can convert text/html content to a ProductList object. The method of interest is HttpMessageConverter#canRead(Class, MediaType). The implementation for all of the above returns false, including Jaxb2RootElementHttpMessageConverter.

由于没有 HttpMessageConverter 可以读取您的HTTP响应,处理失败并出现异常。

Since no HttpMessageConverter can read your HTTP response, processing fails with an exception.

如果您可以控制服务器响应,请修改它以将 Content-type 设置为 application / xml text / xml ,或匹配 application / * + xml

If you can control the server response, modify it to set the Content-type to application/xml, text/xml, or something matching application/*+xml.

如果您不控制服务器响应,则需要编写并注册自己的 HttpMessageConverter (可以扩展Spring类) ,参见 AbstractXmlHttpMessageConverter 及其子类),可以读取和转换 text / html

If you don't control the server response, you'll need to write and register your own HttpMessageConverter (which can extend the Spring classes, see AbstractXmlHttpMessageConverter and its sub classes) that can read and convert text/html.

这篇关于没有为响应类型找到合适的HttpMessageConverter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆