首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jackson -通过Jackson2ObjectMapperBuilderCustomizer配置集合覆盖

Jackson -通过Jackson2ObjectMapperBuilderCustomizer配置集合覆盖
EN

Stack Overflow用户
提问于 2016-12-14 19:35:07
回答 2查看 1.8K关注 0票数 3

通过构造一个新的映射器,我在Spring Boot配置中定制了对Jackson对象映射器中集合的处理,如下所示

代码语言:javascript
复制
@Configuration
public class Config {

@Autowired(required = true)
public void objectMapper(ObjectMapper mapper) {

    mapper.configOverride(Collection.class).setInclude(JsonInclude.Value.construct(JsonInclude.Include.NON_EMPTY, null));
    mapper.configOverride(List.class).setInclude(JsonInclude.Value.construct(JsonInclude.Include.NON_EMPTY, null));
    mapper.configOverride(Map.class).setInclude(JsonInclude.Value.construct(JsonInclude.Include.NON_EMPTY, null));

}

虽然这是可行的,但我知道更优雅的方法是使用Jackson2ObjectMapperBuilderCustomizer

代码语言:javascript
复制
@Bean
public Jackson2ObjectMapperBuilderCustomizer customizeJackson2ObjectMapper() {
    return new Jackson2ObjectMapperBuilderCustomizer() {

        @Override
        public void customize(Jackson2ObjectMapperBuilder builder) {
            builder
            .indentOutput(true)
            .someOtherMethod(...)

        }
    };
}

我如何通过Jackson2ObjectMapperBuilder实现上面的ObjectMapper集合调整?

EN

回答 2

Stack Overflow用户

发布于 2019-01-03 06:33:44

您可以使用本地定义的简单Module,就像在this other use case中一样。SetupContext也有一个configOverride()方法,就像ObjectMapper本身一样。

票数 1
EN

Stack Overflow用户

发布于 2019-01-03 02:48:49

不知道?我有兴趣做同样的事情,只是补充一下:

代码语言:javascript
复制
mapper.configOverride(Map.Entry.class).setFormat(forShape(Shape.OBJECT));

因为@JsonFormat(shape = JsonFormat.Shape.OBJECT)不能很好地工作( https://github.com/FasterXML/jackson-databind/issues/1419 ),而且在Jackson 2.5之后,它是唯一的解决方案(但需要2.9.x)来恢复以前的行为,而不需要编写自定义的序列化程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41141573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档