如何配置spring控制器以对响应使用不同的objectmapper(序列化)

qrjkbowd  于 2021-07-16  发布在  Java
关注(0)|答案(2)|浏览(428)

我为我的springboot应用程序配置了自己的objectmapper,假设objectmapper如下所示(简化):

@Bean
    @Primary
    public ObjectMapper objectMapper() {
        return new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    }

自从 ObjectMapper 是一个 singleton ,我的所有rest控制器都使用相同的objectmapper。但是,有些控制器我想忽略null值,但是我想保留控制器的其余部分来发送null值响应。
有办法配置吗?所以最好的结果是我可以这样配置:
控制器a、b、c->objectmapper x(忽略空值)
控制器d->objectmapper y(忽略空值)
默认值(所有其他控制器)->objectmapper z(返回空值)
要求说明:
我无法更改pojo,因为它是自动生成的,我不想为此更新codegen库或mustache模板。
具体内容谈判不是一种选择

vqlkdk9b

vqlkdk9b1#

除了你的 ObjectMapper 注有 @Primary 您可以配置更多 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;

e0bqpujr

e0bqpujr2#

也许您只需要使用@jsoninclude(jsoninclude.include.non\u null)。尝试在响应模型级别修复它。

相关问题