Java Spring RestTemplate-选择要使用的MessageConverter

Java Spring RestTemplate-选择要使用的MessageConverter,java,spring,httpclient,restful-url,Java,Spring,Httpclient,Restful Url,我使用RestTemplate类发布到基于JSON的RESTful web服务。我可以从文档中看到,RestTemplate实例可以使用几个MessageConverter。我面临的问题是,客户端似乎出于某种原因选择使用基于XML的转换器。“Content-Type”头被设置为application/XML,消息体包含我想作为JSON发送的对象的XML表示。如何最轻松地配置RestTemplate实例以使用MappingJackson2HttpMessageConverter处理我的请求?您的应

我使用RestTemplate类发布到基于JSON的RESTful web服务。我可以从文档中看到,RestTemplate实例可以使用几个MessageConverter。我面临的问题是,客户端似乎出于某种原因选择使用基于XML的转换器。“Content-Type”头被设置为application/XML,消息体包含我想作为JSON发送的对象的XML表示。如何最轻松地配置RestTemplate实例以使用MappingJackson2HttpMessageConverter处理我的请求?

您的
应用程序上下文中提供了多个
消息转换器。Spring很可能从所有可用的消息转换器中选择
Jaxb2RootElementHttpMessageConverter
,从而产生XML输出

要指示Spring在其中使用
MessageConverter
,请在请求中添加内容类型头。例如,通过执行交换而不是get/postForEntity:

HttpHeaders=newhttpheaders();
添加(“内容类型”、“应用程序/json”);
restTemplate.exchange(“http://some.url,HttpMethod.GET新的HttpEntity(头),SomeObject.class);
或者将
clienthttpprequestinterceptor
附加到RestTemplate()。遵循该示例时,请确保使用此拦截器(如在教程中,foo/bar被添加到响应头):

@覆盖
公共ClientHttpResponse截获(HttpRequest HttpRequest,字节[]字节,ClientHttPrequesteExecution ClientHttPrequesteExecution)引发IOException{
httpRequest.getHeaders().set(“内容类型”、“应用程序/json”);
return clienthttpprequestexecution.execute(httpRequest,字节);
}

如果通过
restemplatebuilder
配置
restemplate
,则可以使用
messageConverters(org.springframework.http.converter.HttpMessageConverter…messageConverters)
方法进行配置


参考资料:

您尝试了什么?顾名思义,RestTemplate主要用于带有JSON的RESTful请求。除非另有配置,否则它通常会执行此操作。我使用RestTemplate客户机使用相同的代码建立了一个简单的项目,它在正确的负载和内容类型标题下工作没有问题。但是,当在较大的项目中使用其他连接和配置的Spring组件时,使用XML转换器。我不知道如何弄清楚它为什么会这样,我假设正在使用Jaxb2RootElementHttpMessageConverter(我可以通过查看一些日志语句来确认这一点)。这是因为在类路径上发现了一些JAXB类吗?“默认”使用XML不是很奇怪吗?我使用的是组织内另一个团队编写的库,无法直接访问正在使用的RestTemplate。是否有某种方法可以在更高级别的某个地方通过一些Spring配置来解决这个问题?