在Spring中添加Jaxb2消息转换器会破坏Jackson2 json映射

我正在尝试这样做,所以我的Spring rest应用程序可以处理xml和json响应,但似乎添加Jaxb消息转换器已经破坏了我的json映射。

@Bean public MappingJackson2HttpMessageConverter jsonConverter() { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); SimpleModule simpleModule = new SimpleModule(); simpleModule.addSerializer(String.class, new StringSerializer()); ObjectMapper mapper = new ObjectMapper() .registerModule(simpleModule); converter.setObjectMapper(mapper); return converter; } @Bean public Jaxb2RootElementHttpMessageConverter jaxbConverter() { return new Jaxb2RootElementHttpMessageConverter(); } @Override public void configureMessageConverters(List<HttpMessageConverter> converters) { converters.add(jsonConverter()); converters.add(jaxbConverter()); } 

如果我在那里注释掉第二种和第三种方法,那么一切都会重新开始工作(当然除了xml映射!)。 但是,在那里,我搞砸了一些东西,比如在[APPLEORANGEBANANA]序列化List结果,其中apple,orange和banana是列表中的单独字符串。

如果我直接使用jackson对象映射器映射到json,它没有那个问题,但使用@ResponseBody注释自动序列化为json我有这个问题。

有人有主意吗?

这就是我做到的。

 @RequestMapping(method = RequestMethod.GET, value = "/accounts/{accountId}", produces = {APPLICATION_XML_VALUE, APPLICATION_JSON_VALUE}) @ResponseBody @ResponseStatus(value = HttpStatus.OK) public Account getAccount(@PathVariable String accountId) { return new Account(); // populate Account VO and send } 

并在XML文件中

                   com.test.* com.*.test    

我删除了configureMessageConverters ,它自动拾取了两个转换器,但都没有问题。

事情发生在我身上。 两次:-)

在一种情况下,添加我的转换器之前的简单converters.clear()解决了这个问题。 看起来Spring默认添加了一些转换器。 使用XML注入它们会删除Spring隐式设置的那个,而从代码中显式添加它们则不会。

在另一种情况下,问题是在请求中设置了正确的标头,即content-typeaccept 。 在请求映射中,我必须指定“消耗”和“生成”参数,分别映射两个头。

 public class MyRequestHandler { ... @RequestMapping(... , consumes={ MediaType.APPLICATION_JSON_VALUE, produces = { MediaType.APPLICATION_JSON_VALUE } } public ResponseEntity doSomething(...) { ... } ... } 

这解决了我的问题。