Как десериализовать JSON объект с динамическими c именами переменных в Java POJO? - PullRequest
1 голос
/ 20 марта 2020

Я пытаюсь проанализировать следующий вложенный объект JSON, используя метод getForObject RestTemplate:

  "rates":{
    "USD":1.075489,
    "AUD":1.818178,
    "CAD":1.530576,
    "PLN":4.536389,
    "MXN":25.720674
  }

Количество курсов валют варьируется в зависимости от ввода пользователя (это может быть один или несколько).

Как мне сопоставить такой список объектов или HashMap с классом Java POJO?

Я пытался с композицией в объекте rates:

public class Rates implements Serializable {

    private List<ExternalApiQuoteCurrencyRate> list;

     // getter and no-args constructor
}

public class ExternalApiQuoteCurrencyRate implements Serializable {

    private String currency;
    private BigDecimal rate;

    // getters and no-args constructor
}

Но объект rates десериализуется как null.

Может кто-нибудь помочь? Заранее большое спасибо!

1 Ответ

1 голос
/ 20 марта 2020

Благодаря @Simon и @bhspencer я решил проблему, экспортировав объект JSON в HashMap, используя JsonNode.

Вот решение:

  ResponseEntity<JsonNode> e = restTemplate.getForEntity(API_URL, JsonNode.class);
  JsonNode map = e.getBody(); // this is a key-value list of all properties for this object
  // but I wish to convert only the "rates" property into a HashMap, which I do below:
  ObjectMapper mapper = new ObjectMapper();
  Map<String, BigDecimal> exchangeRates = mapper.convertValue(map.get("rates"), new TypeReference<Map<String, BigDecimal>>() {});
...