我想爲需要JSON輸入的前端庫創建一個java SDK。實質上,該SDK將某些類型的對象轉換爲JSON,然後由該前端庫使用。使用傑克遜反序列化時丟失的字段(多態)
我使用傑克遜的多態序列化/反序列化使用其註釋系統。
我有一個基類A和2個子類B和C擴展A.類A有一個類型字段,使用它我決定使用哪個類(B或C)。語法看起來是這樣的:
@JsonTypeInfo({
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.EXISTING_PROPERTY,
property= "type"
})
@JsonSubTypes({
@JsonSubTypes.Type(value = B.class, name = "b"),
@JsonSubTypes.Type(value = C.class, name = "c")
})
public class A {
private String type;
public void setType(String type){
this.type = type;
}
public String getType(){
return this.type;
}
}
public class B extends A {
}
public class C extends A {
}
所以現在,當我使用傑克遜的ObjectMapper
的readValue
功能和閱讀字符串化JSON,並轉換爲A類,我得到基於無論是A類或B類的正確實例關於類型變量的值。 然而,這裏是實際的問題,當我嘗試使用功能getType
我總是在這些對象獲得null
。我不知道爲什麼傑克遜沒有在對象上設置這些值。
String json = "{ type: 'b' }"; // example input json
ObjectMapper om = new ObjectMapper();
A a = om.readValue(json, A.class);
// a is actually an instance of class B
a.getType()// this is null
謝謝,工作!不知道我在文檔中錯過了它。 – Rajan