首页 > 解决方案 > 如何配置spring控制器以使用不同的objectMapper进行响应(序列化)

问题描述

我为我的 SpringBoot 应用程序配置了自己的 ObjectMapper,假设对象映射器如下所示(简化):

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

由于ObjectMapper是 a singleton,因此我所有的 REST 控制器都使用相同的 ObjectMapper。但是,有一些控制器我想忽略空值,但我想保留我的控制器的其余部分来发送空值响应。

有没有办法配置它?所以最好的结果是我可以配置这样的东西:

需求说明:

标签: springspring-bootjacksonobjectmapper

解决方案


除了您的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;

推荐阅读