0
讓我們假設我們有以下結構:派生的確切類從包裝類傑克遜
class BaseClass {
...
String typeOfSomeClass;
SomeClassBasedOnType someClassBasedOnType;
}
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=As.PROPERTY, property="BaseClass.typeOfSomeClass")
@JsonSubTypes({
@Type(value = SomeClassBasedOnTypeImpl1.class, name="type1"),
@Type(value = SomeClassBasedOnTypeImpl2.class, name="type2")
})
interface SomeClassBasedOnType {
}
@JsonTypeName("type1")
class SomeClassBasedOnTypeImpl1 implements SomeClassBasedOnType {
String str1;
}
@JsonTypeName("type2")
class SomeClassBasedOnTypeImpl2 implements SomeClassBasedOnType {
String str2;
}
通過上述結構我想存儲使用傑克遜JSON。我需要解析兩種可能JSONs是:
{"typeOfSomeClass":"type1", "someClassBasedOnType": {"str1":"someValue"}}
和
{"typeOfSomeClass":"type2", "someClassBasedOnType": {"str2":"someValue"}}
這裏是我的代碼,我用它來反序列化JSON:
BaseClass baseClass = new ObjectMapper().readValue(someJsonAsString, BaseClass.class);
的唯一的事情是,我不知道如何從「基礎」JSON獲取類型。語法:...property="BaseClass.typeOfSomeClass"
仍然在SomeClassBasedOnType實現類中查找屬性。任何想法如何指定我需要包裝類的屬性?
只是爲了闡明「基礎」JSON包含許多鍵,它們都是相同的,包括鍵someClassBasedOnType。然而,關鍵字someClassBasedOnType可能包含兩個不同的JSON對象(具有不同的鍵),區分這些對象的方式是基於名爲typeOfSomeClass的「基礎」JSON中的鍵的值。
涉及: http://stackoverflow.com/questions/38657521/derive-the-exact -class-of-the-wrapper-class-gson –
順便說一句,我已經解決了使用自定義Deserializer的問題。但是應該有更多「優雅」的解決方案... –