2013-06-11 104 views
1

有沒有辦法在映射器配置上指定@JsonTypeIdResolver而不是註釋目標類?的 例如,而不是:有沒有辦法在映射器配置上指定@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庫不能依靠...

回答

2

你可以使用傑克遜的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

處理可以通過定義自定義AnnotationIntrospector覆蓋:通常通過擴展默認JacksonAnnotationIntrospector。這可以使用任何你想要的備用數據源。

混合註釋是另一個顯而易見的方法,正如接受的答案中所解釋的。

+0

感謝您的選擇 – redben

相關問題