Java 从包装器类中的类型反序列化Jackson中的动态实体
我使用以下类来解析API请求:Java 从包装器类中的类型反序列化Jackson中的动态实体,java,jackson,Java,Jackson,我使用以下类来解析API请求: 公共类SkydropXapResponse{ 私有字符串id; 私有字符串类型; 私有SkydropXEntity属性; 公共字符串getId(){return id;} public void setId(字符串id){this.id=id;} 公共字符串getType(){return type;} public void setType(字符串类型){this.type=type;} public SkydropXEntity getAttributes()
公共类SkydropXapResponse{
私有字符串id;
私有字符串类型;
私有SkydropXEntity属性;
公共字符串getId(){return id;}
public void setId(字符串id){this.id=id;}
公共字符串getType(){return type;}
public void setType(字符串类型){this.type=type;}
public SkydropXEntity getAttributes(){return attributes;}
public void setAttributes(SkydropXEntity属性){this.attributes=attributes;}
}
SkydropXEntity.java
是一个通过具体类型扩展的类,具有以下特性:
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME,property=“type”)
@JsonSubTypes({
@JsonSubTypes.Type(name=“parcels”,value=SkydropXParcel.class),
@JsonSubTypes.Type(name=“rates”,value=skydropxquote.class),
@JsonSubTypes.Type(name=“addresses”,value=SkydropXAddress.class),
@JsonSubTypes.Type(name=“labels”,value=SkydropXLabel.class),
@JsonSubTypes.Type(name=“Shippings”,value=SkydropXShipment.class),
})
公共抽象类SkydropXEntity{}
我知道我可以使用type属性让Jackson知道通过将其作为属性来转换为具体类型的内容,但是它必须在父类中才能工作。
有没有什么方法可以让我使用SkydropXapResponse中的
type
属性告诉Jackson它应该反序列化POJOs中的哪些具体类型?对于任何偶然发现这一点的人,我已经找到了答案!
我没有将@JsonTypeInfo
注释添加到抽象类中,而是将它们添加到包装类的属性中
公共类SkydropXapResponse{
私有字符串id;
私有字符串类型;
@JsonTypeInfo(使用=JsonTypeInfo.Id.NAME,property=“type”,include=JsonTypeInfo.As.EXTERNAL\u属性)
@JsonSubTypes(值={
@JsonSubTypes.Type(name=“parcels”,value=SkydropXParcel.class),
@JsonSubTypes.Type(name=“rates”,value=skydropxquote.class),
@JsonSubTypes.Type(name=“addresses”,value=SkydropXAddress.class),
@JsonSubTypes.Type(name=“labels”,value=SkydropXLabel.class),
@JsonSubTypes.Type(name=“Shippings”,value=SkydropXShipment.class),
})
私有SkydropXEntity属性;
公共字符串getId(){return id;}
public void setId(字符串id){this.id=id;}
公共字符串getType(){return type;}
public void setType(字符串类型){this.type=type;}
public SkydropXEntity getAttributes(){return attributes;}
public void setAttributes(SkydropXEntity属性){this.attributes=attributes;}
}
对于任何偶然发现这一点的人,我已经找到了我的答案!
我没有将@JsonTypeInfo
注释添加到抽象类中,而是将它们添加到包装类的属性中
公共类SkydropXapResponse{
私有字符串id;
私有字符串类型;
@JsonTypeInfo(使用=JsonTypeInfo.Id.NAME,property=“type”,include=JsonTypeInfo.As.EXTERNAL\u属性)
@JsonSubTypes(值={
@JsonSubTypes.Type(name=“parcels”,value=SkydropXParcel.class),
@JsonSubTypes.Type(name=“rates”,value=skydropxquote.class),
@JsonSubTypes.Type(name=“addresses”,value=SkydropXAddress.class),
@JsonSubTypes.Type(name=“labels”,value=SkydropXLabel.class),
@JsonSubTypes.Type(name=“Shippings”,value=SkydropXShipment.class),
})
私有SkydropXEntity属性;
公共字符串getId(){return id;}
public void setId(字符串id){this.id=id;}
公共字符串getType(){return type;}
public void setType(字符串类型){this.type=type;}
public SkydropXEntity getAttributes(){return attributes;}
public void setAttributes(SkydropXEntity属性){this.attributes=attributes;}
}