当请求主体是列表或对象时,如何使用RestTemplate反序列化JSON?

问题描述 投票:0回答:1

我正在尝试通过使用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转换器即可解决此问题的方法?如果必须创建它,该怎么办?

json deserialization resttemplate
1个回答
0
投票

通过使用解决:

 @JsonProperty(value = "Charge")
 @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 private List<Charge> charges;
© www.soinside.com 2019 - 2024. All rights reserved.