强制Spring RestTemplate使用XmlConverter [英] Force Spring RestTemplate to use XmlConverter

查看:131
本文介绍了强制Spring RestTemplate使用XmlConverter的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们正在与第三方集成,该第三方将带有内容类型标头的xml作为text / html发送。我们计划使用Spring的RestTemplate将它映射到我们从xsds生成的类,但是RestTemplate无法找到用于内容的适当转换器。第三方拒绝修复内容类型,因为它可能会破坏其他伙伴的集成。

We are integrating with a third party that is sending xml with the content-type header as text/html. We were planning on using Spring's RestTemplate to map it to classes we've generated from xsds, but the RestTemplate fails to find an appropriate converter to use for the content. The third party refuses to fix the content-type because it might break other partner's integration.

有没有办法使用Spring的RestTemplate强制它使用特定的转换器?
我们基本上只是做以下事情:

Is there a way with Spring's RestTemplate to force it to use a specific converter? We are basically just doing the following:

RestTemplate restTemplate = new RestTemplate();
XmlClass xmlClass = restTemplate.getForObject("http://example.com/", XmlClass.class);

并获得以下例外:


org.springframework.web.client.RestClientException:无法提取
响应:没有为响应类型找到合适的HttpMessageConverter
[XmlClass]和内容类型[text / html; charset = ISO-8859-1]
org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:84)

org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [XmlClass] and content type [text/html;charset=ISO-8859-1] at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:84)


推荐答案

我们实施的解决方案是使用 MediaType.TEXT_HTML Jaxb2RootElementHttpMessageConverter >到 RestTemplate HttpMessageConverters 。它不是理想的,因为它创建了一个冗余的jaxb消息转换器,但它可以工作。

The solution we implemented was to add a Jaxb2RootElementHttpMessageConverter with MediaType.TEXT_HTML to the RestTemplate HttpMessageConverters. It's not ideal since it creates a redundant jaxb message converter but it works.

RestTemplate restTemplate = new RestTemplate();
List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
Jaxb2RootElementHttpMessageConverter jaxbMessageConverter = new Jaxb2RootElementHttpMessageConverter();
List<MediaType> mediaTypes = new ArrayList<MediaType>();
mediaTypes.add(MediaType.TEXT_HTML);
jaxbMessageConverter.setSupportedMediaTypes(mediaTypes);
messageConverters.add(jaxbMessageConverter);
restTemplate.setMessageConverters(messageConverters);

这篇关于强制Spring RestTemplate使用XmlConverter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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