ObjectMapper 避免注解

ObjectMapper avoid annotation

我有这样的注释:

    @Valid
@NotNull
@JsonTypeResolver(com.rsqtechnologies.sioms.shared.JsonTypeResolver.class)
@JsonTypeInfo(
        use = JsonTypeInfo.Id.NAME,
        include = JsonTypeInfo.As.PROPERTY,
        property = "type",
        visible = true)
@JsonSubTypes({
        @JsonSubTypes.Type(value = HandballPlayerTO.class, name = "handballPlayerTO"),
        @JsonSubTypes.Type(value = FootballPlayerTO.class, name = "footballPlayerTO")
})

并且想在使用 objectMapper 期间避免@JsonTypeResolver。

我试过这个:

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

但正如我注意到的那样,它删除了旁边出现的所有注释。

_findTypeResolver 方法处理@JsonTypeResolver、@JsonTypeInfo 和@JsonTypeIdResolver。通过覆盖此方法,可以防止 Jackson 处理所有这些。不要覆盖 _findTypeResolver,而是覆盖 _findAnnotation,这样 Jackson 仍然可以看到其他人。

JacksonAnnotationIntrospector ignoreJsonTypeInfoIntrospector = new JacksonAnnotationIntrospector() {
    protected <A extends Annotation> A _findAnnotation(Annotated annotated, Class<A> annoClass) {
        return JsonTypeResolver.class == annoClass ? null : annotated.getAnnotation(annoClass);
    }
};