我正在使用Jackson
来反序列化从宁静呼叫到ups api
的响应,以获取货运跟踪信息。
在回复中,如果每批货物有多个包裹,我将得到与以下代码段相似的回复
"Shipment": {
"InquiryNumber": {
"Code": "01",
"Description": "ShipmentIdentificationNumber",
"Value": "some-value-here"
},
"ShipperNumber": "1234",
"Package": [{
"TrackingNumber": "12345"
},
{
"TrackingNumber": "67890"
}
]
}
}
这很好,我可以使用下面的代码简单地使用Jackson来取消编组:
@JsonDeserialize(builder = Shipment.Builder.class)
@Builder(builderClassName = "Builder")
@Getter
public class Shipment {
@JsonProperty("ShipperNumber")
private final String shipperNumber;
@JsonProperty("Package")
private final List<Package> packages;
@JsonPOJOBuilder(withPrefix = "")
public static class Builder {
}
}
但是,如果api响应中只有一个package
项,那么它不是将其作为具有一个条目的软件包集合返回,而是将其作为单个对象返回,如下所示:
"Shipment": {
"InquiryNumber": {
"Code": "01",
"Description": "ShipmentIdentificationNumber",
"Value": "some-value-here"
},
"ShipperNumber": "1234",
"Package": {
"TrackingNumber": "12345"
}
}
}
这将引发以下错误,因为杰克逊无法(显然)将对象反序列化为列表
JSON解析错误:无法从START_OBJECT令牌中反序列化
java.util.ArrayList<com.example.Package>
的实例;
Jackson是否有一种方法可以根据数据类型(即集合或单个对象)封送数据?