3

有没有办法在映射器配置上指定 @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.getSerializationConfig()
.with(new JacksonAnnotationIntrospector())
.without(SerializationFeature.INDENT_OUTPUT);
...
// something like this :
.addTypeIdResolver(Foo.class, FooTypeIdResolver.class)

我问这个是因为 FooTypeIdResolver 位于 Foo 库不能依赖的不同“库”上......

4

2 回答 2

3

您可以使用 Jackson 的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);
于 2013-06-12T10:28:47.723 回答
3

可以通过定义 custom 来覆盖所有注释的处理AnnotationIntrospector:通常通过扩展 default JacksonAnnotationIntrospector。然后,这可以使用您想要的任何备用数据源。

正如接受的答案中所解释的,混合注释是另一种明显的方法。

于 2013-06-12T18:55:19.353 回答