如何解决如何配置 spring 控制器以使用不同的 objectMapper 进行响应序列化
我为 SpringBoot 应用程序配置了自己的 ObjectMapper,假设对象映射器类似于以下内容(简化):
@Bean
@Primary
public ObjectMapper objectMapper() {
return new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
}
由于 ObjectMapper
是 singleton
,所以我所有的 REST 控制器都使用相同的 ObjectMapper。
但是,有一些控制器我想忽略空值,但我想保留控制器的其余部分来发送空值响应。
有没有办法配置它?所以最好的结果是我可以这样配置:
- 控制器 A、B、C -> ObjectMapper X(忽略空值)
- 控制器 D -> ObjectMapper Y(忽略空值)
- 默认(所有其他控制器)-> ObjectMapper Z(返回空值)
要求说明:
- 我无法更改 POJO,因为它是自动生成的,而且我不想为此更新代码生成库或 mustache 模板。
- 具体内容协商不是一种选择
解决方法
除了用 ObjectMapper
注释的 @Primary
您可以使用您选择的 bean 名称配置更多 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
配置的
@Bean("anyName")
@Autowired
private ObjectMapper objectMapper;
@Autowired
@Qualifier("mySpecialObjectMapper")
private ObjectMapper otherObjectMapper;
,
也许你只需要使用@JsonInclude(JsonInclude.Include.NON_NULL)。尝试在响应模型级别修复它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。