Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从包装器类中的类型反序列化Jackson中的动态实体_Java_Jackson - Fatal编程技术网

Java 从包装器类中的类型反序列化Jackson中的动态实体

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()

我使用以下类来解析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(){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;}
}