我正在尝试通过使用API反序列化JSON。但是,来自API的JSON主体不一致。有时它是列表,有时是一个项目。
示例:
"Charge": [
{
"ChargeType": "EXPRESS 12:00",
"ChargeAmount": 0.0
},
{
"ChargeCode": "YK",
"ChargeType": "12:00 PREMIUM",
"ChargeAmount": 0.0
},
]
在另一种情况下:
"Charge": {
"ChargeType": "EXPRESS",
"ChargeAmount": 8.5
}
我正在使用RestTemplate
和DTO。
我的DTO是这样构造的。
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Charges {
@JsonProperty(value = "Currency")
private String currency;
@JsonProperty(value = "Charge")
private List<Charge> charges;
}
在作为对象出现的情况下,此操作失败:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.ArrayList<Charge>` out of START_OBJECT token
是否有一种无需创建自定义JSON转换器即可解决此问题的方法?如果必须创建它,该怎么办?
通过使用解决:
@JsonProperty(value = "Charge")
@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
private List<Charge> charges;