java - 为 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
工作,我必须定义一个特殊的MappingJackson2XmlHttpMessageConverter
bean。
@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();
}
我对这种方法的问题是:
- 我必须定义并自动装配第二个 bean,如何避免重复配置?
- 我构建的模板仅对 XML 有效。我试过
addMessageConverters
了,但它在内容协商中产生了奇怪的错误。 - 在集成测试中,这意味着我必须模拟构建器来创建相同的模板来绑定模拟 MVC 服务器。一旦弹出其他模板配置,这可能会变得混乱。
我想要什么:提供定制器并应用于 Spring 的 MVC 端点以及 RestTemplateBuilder(替换默认的 XmlHttpMessageConverter)的单个 bean。
解决方案
推荐阅读
- c# - 您如何在 C# 和 LINQ 中使用在运行时为列表定义的参数进行 OrderBy
其中每个动态都是一个 ExpandoObject - reactjs - 为什么异步测试中的“then”部分开玩笑地失败了?
- javascript - 三元运算符不返回未定义
- maven - 将存储库从 Sonatype Nexus 2.8.0-05 迁移到 3.x
- javascript - Codeigniter 中的登录表单问题
- html - 为什么我的页面在 Chrome 上看起来不错,但在 Firefox 上却不行?
- javascript - 单击按钮删除 div(更改 id)
- node.js - 如何使用 jest 测试电子 ipc 事件?
- javascript - 带有 AJAX 的 POST 文件数据附加了未知的 jquery 回调字符串
- python - 如何将复杂的double转换为python数组