【问题标题】:Get HttpMessageNotReadableException Exception when using Spring - RestTemplate使用 Spring 时获取 HttpMessageNotReadableException 异常 - RestTemplate
【发布时间】:2017-02-17 08:58:09
【问题描述】:

我正在使用 springframework -RestTemplate, 为了发出 get 请求,并将 xml 响应转换为 java 对象。 运行后:RestTemplate.exchange, 我遇到了以下异常:

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 呢? 我该如何解决?

谢谢!!

【问题讨论】:

  • 您可能没有 xml 到对象转换所需的 MessageConverter
  • 嗨,我尝试添加:restTemplate.getMessageConverters().add(new MappingJackson2XmlHttpMessageConverter());但仍然得到这个异常。我应该使用哪个 messageConverter?谢谢
  • 您是否也将 Jackson2 添加到您的类路径中?
  • 我正在使用 mvn 并添加以下依赖项:com.fasterxml.jackson.corejackson-databind 谢谢

标签: java xml spring resttemplate


【解决方案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());
}

【讨论】:

  • 嗨,谢谢,我打印转换器,Jaxb2RootElementHttpMessageConverter 就是其中之一。但我仍然得到这个例外。有办法提示 spring 使用哪个转换器?
  • 如果您有一个支持 XML 格式的消息转换器,您能否验证服务器正在发送正确的内容类型标头?类似application/xml,而不是text/plaintext/html
猜你喜欢
  • 1970-01-01
  • 2016-10-31
  • 2019-06-02
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 2013-11-01
  • 1970-01-01
相关资源
最近更新 更多