我想为需要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