强制Spring RestTemplate使用XmlConverter [英] Force Spring RestTemplate to use 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屋!