2012-08-03 100 views
42

我想知道如果@JsonTypeInfo註釋可以用於接口。我有一系列應該被序列化和反序列化的類。傑克遜註釋中的多態性:@JsonTypeInfo用法

這是我想要做的。我有兩個實現類Sub1,Sub2實施MyInt。某些模型類具有實現類型的接口引用。我想反序列化對象基於多態性

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=As.WRAPPER_OBJECT) 
@JsonSubTypes({ 
    @Type(name="sub1", value=Sub1.class), 
    @Type(name="sub2", value=Sub2.class)}) 
public interface MyInt{ 
} 

@JsonTypeName("sub1") 
public Sub1 implements MyInt{ 
} 

@JsonTypeName("sub2") 
public Sub2 implements MyInt{ 
} 

我得到以下JsonMappingException

意外令牌(END_OBJECT),預計FIELD_NAME:需要JSON字符串 包含類型ID

+0

你看到了嗎? http://jackson-users.ning.com/forum/topics/mapper-not-include-type-in​​formation-when-serializing-object-why?xg_source=activity你有沒有提及類型的任何列表像在其他討論線? – 2012-08-04 04:44:17

+1

我認爲你需要展示更多的代碼(如何進行序列化,反序列化)以及生成/消費JSON。 – StaxMan 2012-08-04 17:58:55

回答

40

@ JsonSubTypes.Type必須具有類似的值和名稱,

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=As.WRAPPER_OBJECT, property="type") 
    @JsonSubTypes({ 

     @JsonSubTypes.Type(value=Dog.class, name="dog"), 

     @JsonSubTypes.Type(value=Cat.class, name="cat") 

    }) 

在子類中,使用@JsonTypeName("dog")來表示名稱。

'dog'和'cat'的值將在名爲'type'的屬性中設置。

+0

感謝您的回覆。但是,我仍然遇到同樣的錯誤。你認爲我應該改變@JsonTypeInfo中的任何東西嗎? – Chris 2012-08-03 15:20:59

+2

有沒有人知道JsonTypeInfo是否可以應用於接口? – Chris 2012-08-03 16:32:17

+0

問題可能與您的輸入json字符串有關。你想要發佈什麼? – 2012-08-03 16:37:45