我有这样的注释:
@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);但正如我注意到的,它移除了所有出现在旁边的注释。
发布于 2017-09-09 13:59:53
_findTypeResolver方法处理@JsonTypeResolver、@JsonTypeInfo和@JsonTypeIdResolver。通过重写此方法,可以防止Jackson处理所有这些方法。而不是覆盖_findTypeResolver,而是重写_findAnnotation,这样杰克逊仍然可以看到其他的。
JacksonAnnotationIntrospector ignoreJsonTypeInfoIntrospector = new JacksonAnnotationIntrospector() {
protected <A extends Annotation> A _findAnnotation(Annotated annotated, Class<A> annoClass) {
return JsonTypeResolver.class == annoClass ? null : annotated.getAnnotation(annoClass);
}
};https://stackoverflow.com/questions/46129821
复制相似问题