Как десериализовать JSON с RestTemplate, когда тело запроса является либо списком, либо объектом? - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь десериализовать JSON от использования API. Однако тело JSON, полученное из API, не соответствует. Иногда это список, а иногда как отдельный элемент.

Пример:

"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

Есть ли как я могу решить эту проблему, не создавая свой Custom JSON Converter? И если мне нужно создать его, как я могу это сделать?

1 Ответ

0 голосов
/ 14 февраля 2020

Решено с помощью:

 @JsonProperty(value = "Charge")
 @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 private List<Charge> charges;
...