Java 如何在添加jackson dataformat xml的情况下将默认MessageConverter设置为JSON?
我有一个可用的spring启动应用程序,它使用JSON作为exchange数据格式。现在我必须添加一个只以xml格式发送数据的服务。我在pom中添加了Java 如何在添加jackson dataformat xml的情况下将默认MessageConverter设置为JSON?,java,spring-boot,jackson-databind,jackson-dataformat-xml,Java,Spring Boot,Jackson Databind,Jackson Dataformat Xml,我有一个可用的spring启动应用程序,它使用JSON作为exchange数据格式。现在我必须添加一个只以xml格式发送数据的服务。我在pom中添加了jackson dataformat xml,效果非常好 @服务 公共类模板服务{ 私有最终RestTemplate RestTemplate; 私有最终字符串serviceUri; 公共模板服务(RestTemplate RestTemplate,@Value(${service.url\u templates}”)字符串服务URI){ this
jackson dataformat xml
,效果非常好
@服务
公共类模板服务{
私有最终RestTemplate RestTemplate;
私有最终字符串serviceUri;
公共模板服务(RestTemplate RestTemplate,@Value(${service.url\u templates}”)字符串服务URI){
this.restTemplate=restTemplate;
this.serviceUri=serviceUri;
}
公共布尔createTemplate(模板模板){
HttpHeaders=新的HttpHeaders();
setAccept(Collections.singletonList(MediaType.APPLICATION_XML));
headers.setContentType(MediaType.APPLICATION\uXML);
HttpEntity=新的HttpEntity(模板、标题);
ResponseEntity response=restemplate.exchange(serviceUri,HttpMethod.POST,entity,Template.class);
if(response.getStatusCode().is2xxSuccessful()){
//做点什么
返回true;
}
返回false;
}
}
现在不幸的是,在添加了依赖项之后,我的所有其他POST方法都默认发送XML。或者Content
设置为application/xml
@服务
公共类其他服务{
私有最终RestTemplate RestTemplate;
私有最终字符串anotherUri;
public SomeOtherService(restemplate restemplate,@Value(${anotherUri.url})字符串anotherUri){
this.restTemplate=restTemplate;
this.anotherUri=anotherUri;
}
公共组件实体doSomething(字符串projectId,MyNewComponent newComponent){
ResponseEntity result=this.restTemplate.exchange(另一个URI,HttpMethod.POST,新的HttpEntity(NewcomComponent),MyNewcomComponent.class);
//...
}
}
我没有明确设置标题,因为有很多POST请求,我不想全部更改它们。有没有办法将默认值内容
设置为JSON
到目前为止我试过了
@覆盖
public void配置contentnegotiation(ContentNegotiationConfigurer-configurer){
defaultContentType(MediaType.APPLICATION_JSON);
}
restemplate.setMessageConverters(Collections.singletonList(新的MappingJackson2HttpMessageConverter());
并在我想要XML的服务中使用新RestTemplate()
==>数字3实际上很有效,但感觉有点不对劲
我希望在某个地方设置默认的Content
类型,以便在没有设置任何内容的正常情况下使用JSON,在我显式地将Content
设置为XML的情况下使用XML
谢谢您的帮助。使用它并不能说明情况。这就是。我们最终发现,消息转换器的顺序非常重要。Jackson似乎将XML消息转换器放在JSON消息转换器之前。因此,我们将XML消息转换移到了末尾,它成功了
@Bean
RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
// move XML converter to the end of list
List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
for (int i = 0; i < messageConverters.size() -1 ; i++) {
if (messageConverters.get(i) instanceof MappingJackson2XmlHttpMessageConverter) {
Collections.swap(messageConverters, i,messageConverters.size() - 1);
}
}
restTemplate.setMessageConverters(messageConverters);
// add interceptors if necessary
restTemplate.setInterceptors(Collections.singletonList(catalogInterceptior()));
return restTemplate;
}
@Bean
RestTemplate RestTemplate(){
RestTemplate RestTemplate=新RestTemplate();
//将XML转换器移动到列表的末尾
列表是Jackson决定的还是Spring?这应该可以通过Spring属性直接配置