具有以下類:傑克遜TYPEID不產生JSON包括
public class BaseEntity<E> {
public TrackedChange<E> trackChange;
}
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({ @JsonSubTypes.Type(value=B.class, name="b_type") })
public abstract class A extends BaseEntity<A> implements Cloneable{
public String aFoo;
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
@JsonTypeName("b_type")
public class B extends A {
public String bFoo;
}
public class TrackedChange<E> {
public E tracked;
}
public class Runner {
public static void main(String[] args) throws JsonProcessingException, CloneNotSupportedException {
B bInstance = new B();
bInstance.bFoo = "bFoo";
bInstance.aFoo = "aFoo";
B clone = (B) bInstance.clone();
bInstance.trackChange = new TrackedChange<A>();
bInstance.trackChange.tracked = clone;
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(bInstance));
}
}
生成的JSON是:
{
"type":"b_type",
"trackChange":{
"tracked":{
"trackChange":null,
"aFoo":"aFoo",
"bFoo":"bFoo"
}
},
"aFoo":"aFoo",
"bFoo":"bFoo"
}
類型未包含在trackChange.tracked對象("type":"b_type")
信息。如何解決這個問題?
編輯:最後我用JsonTypeInfo.As.EXISTING_PROPERTY
這是在2.3.0版本後引入的。它利用現有的屬性來確定實際的類型。
謝謝!我將JsonTypeInfo.Id.CLASS更改爲JsonTypeInfo.Id.NAME,並開始按預期工作! – tiktak