首页 > 解决方案 > 为 Jackson 激活 RestTemplate 和 Spring MVC 的 JAXB 模块

问题描述

我想使用 JAXB 注释而不是 Jackson 的注释进行 XML 序列化和反序列化。

我正在使用 Spring Boot 2.1.3,它使用 Spring 5.1.5 和 Jackson 2.9.8。

所以我定义了我的定制器 bean

@Bean
Jackson2ObjectMapperBuilderCustomizer jacksonCustomizer() {
  return (mapperBuilder) -> mapperBuilder
                            .modulesToInstall(new JaxbAnnotationModule())
                            .defaultUseWrapper(false);
}

它在 Spring MVC 中自动工作@RestController

但是,它不适用于使用RestTemplate.

为了RestTemplate工作,我必须定义一个特殊的MappingJackson2XmlHttpMessageConverterbean。

@Bean
public MappingJackson2XmlHttpMessageConverter mappingJackson2XmlHttpMessageConverter(
  Jackson2ObjectMapperBuilder builder) {

  XmlMapper mapper = builder.createXmlMapper(true).build();
  return new MappingJackson2XmlHttpMessageConverter(mapper);
}

然后,当RestTemplate需要时,我自己构建它:

@Autowired
public AClient(RestTemplateBuilder restTemplateBuilder, MappingJackson2XmlHttpMessageConverter xmlHttpMessageConverter) {

  this.xmlRestTemplate = restTemplateBuilder
                         .messageConverters(xmlHttpMessageConverter)
                         .build();
}

我对这种方法的问题是:

  1. 我必须定义并自动装配第二个 bean,如何避免重复配置?
  2. 我构建的模板仅对 XML 有效。我试过addMessageConverters了,但它在内容协商中产生了奇怪的错误。
  3. 在集成测试中,这意味着我必须模拟构建器来创建相同的模板来绑定模拟 MVC 服务器。一旦弹出其他模板配置,这可能会变得混乱。

我想要什么:提供定制器并应用于 Spring 的 MVC 端点以及 RestTemplateBuilder(替换默认的 XmlHttpMessageConverter)的单个 bean。

标签: javaspring-bootjaxbresttemplatejackson-dataformat-xml

解决方案


推荐阅读