为特定注释禁用 Jackson 映射器

2022-01-13 00:00:00 json annotations java jackson

使用 Jackson,可以轻松禁用给定 ObjectMapper 的所有注释.有没有办法只禁用一个给定的注释?

With Jackson, it's easy to disable all annotations for a given ObjectMapper. Is there a way to only disable one given annotation?

// disable all
ObjectMapper mapper = new ObjectMapper()
mapper.disable(MapperFeature.USE_ANNOTATIONS);

// disable one?
ObjectMapper mapper = new ObjectMapper()
mapper.disable(@JsonIgnore);

使用 @JacksonAnnotationsInside,我定义了一个自定义 Jackson 注释,我只希望它在某些情况下使用.

Using @JacksonAnnotationsInside, I've defined a custom Jackson annotation and I only want it to be used in certain circumstances.

推荐答案

这是我遇到的最好的.我想我是在某个地方的 Jackson 用户组论坛上看到的.

This the best I've come across. I think I saw it on the Jackson user group forums somewhere.

本质上,它创建了一个自定义注解内省器,如果它看到它有一个特定的注解(在本例中为 JsonTypeInfo),则返回 null

Essentially it makes a custom annotation introspector, which returns null if it sees that it has a specific annotation (in this case JsonTypeInfo)

JacksonAnnotationIntrospector ignoreJsonTypeInfoIntrospector = new JacksonAnnotationIntrospector() {
            @Override
            protected TypeResolverBuilder<?> _findTypeResolver(
                    MapperConfig<?> config, Annotated ann, JavaType baseType) {
                if (!ann.hasAnnotation(JsonTypeInfo.class)) {
                    return super._findTypeResolver(config, ann, baseType);
                }
                return null;
            }
        };

        mapper.setAnnotationIntrospector(ignoreJsonTypeInfoIntrospector);

相关文章