有没有办法在mapper配置上指定@JsonTypeIdResolver而不是注释目标类? 例如,而不是:
@JsonTypeInfo(
use = JsonTypeInfo.Id.CUSTOM,
include = JsonTypeInfo.As.PROPERTY,
property = "@type")
@JsonTypeIdResolver(FooTypeIdResolver.class)
public class Foo {
}
只有
@JsonTypeInfo(
use = JsonTypeInfo.Id.CUSTOM,
include = JsonTypeInfo.As.PROPERTY,
property = "@type")
public class Foo {
}
在mapper上执行以下操作
mapper.getSerializationConfig()
.with(new JacksonAnnotationIntrospector())
.without(SerializationFeature.INDENT_OUTPUT);
...
// something like this :
.addTypeIdResolver(Foo.class, FooTypeIdResolver.class)
我问这个是因为FooTypeIdResolver位于不同的“库”上,Foo库不能依赖它......
答案 0 :(得分:3)
您可以使用杰克逊的mix-in annotations,在您的情况下,您首先要创建一个包含您要添加的注释的类:
@JsonTypeIdResolver(FooTypeIdResolver.class)
private static class FooMixIn {
}
然后你会将这个混合应用到Foo类(粗略地说这会在FooMixIn
上显示注释并将它们应用到Foo
)
mapper.getSerializationConfig().addMixInAnnotations(Foo.class, FooMixIn.class);
mapper.getDeserializationConfig().addMixInAnnotations(Foo.class, FooMixIn.class);
答案 1 :(得分:3)
定义自定义AnnotationIntrospector
可以覆盖所有注释的处理:通常通过扩展默认JacksonAnnotationIntrospector
。然后,这可以使用您想要的任何备用数据源。
混合注释是另一种明显的方法,如公认的答案所述。