spring - 如何配置spring控制器以使用不同的objectMapper进行响应(序列化)
问题描述
我为我的 SpringBoot 应用程序配置了自己的 ObjectMapper,假设对象映射器如下所示(简化):
@Bean
@Primary
public ObjectMapper objectMapper() {
return new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
由于ObjectMapper
是 a singleton
,因此我所有的 REST 控制器都使用相同的 ObjectMapper。但是,有一些控制器我想忽略空值,但我想保留我的控制器的其余部分来发送空值响应。
有没有办法配置它?所以最好的结果是我可以配置这样的东西:
- 控制器 A、B、C -> ObjectMapper X(忽略空值)
- 控制器 D -> ObjectMapper Y(忽略空值)
- 默认(所有其他控制器)-> ObjectMapper Z(返回空值)
需求说明:
- 我无法更改 POJO,因为它是自动生成的,我不想为此更新 codegen 库或 mustache 模板。
- 特定内容协商不是一种选择
解决方案
除了您的ObjectMapper
注释之外,您还可以使用您选择的 bean 名称@Primary
配置更多的 s。ObjectMapper
@Bean
@Primary
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
return objectMapper;
}
@Bean("mySpecialObjectMapper")
public ObjectMapper anotherObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper()
/* do some other configuration */;
return objectMapper;
}
然后你可以像这样在你的控制器中引用它们:
- 只是给予
@Autowired
将注入主要的ObjectMapper
。 @Autowired
一起给予@Qualifier("anyName")
将注入ObjectMapper
配置的 with@Bean("anyName")
@Autowired
private ObjectMapper objectMapper;
@Autowired
@Qualifier("mySpecialObjectMapper")
private ObjectMapper otherObjectMapper;
推荐阅读
- fibonacci - 为什么敏捷中的故事有斐波那契数列作为估计?
- android - Play Store CALL_LOG 和 SMS 权限不在 APK 中,但仍显示在商店中
- javascript - Chrome 扩展获取请求返回 Promise
- javascript - 未捕获的 SyntaxError Three.js FontLoader
- javascript - 检查页面上的链接是否包含字符串
- python - 在 Apache Airflow 中保存运算符的结果
- angular - 当您事先不知道键名时在 Angular 7 中使用 REST JSON 对象
- vba - 如何将 GUID 分配给 VBA 中的 DAO 参数
- php - 用 oracle 和 php 更新
- c# - API Get 需要 Content-Type application/json;charset=UTF-8 - Http 客户端问题