如何在 RestTemplate 中获取 JSONArray 列表 Spring

How to get the JSONArray List in RestTemplate Spring

第一个 API 回复

{
    "initial": null,
    "answer": 
    [
        {
            "id": 13,
            "name": "Lion",
            "allowed_values": [
                "2017",
                "2018",
            ],
            "archived": false
        },
        {
        "id": 14,
            "name": "Tiger",
            "allowed_values": [
                "2017",
                "2018",
            ],
            "archived": true
        }

    ],
    "final": null

}

第二次 API 回复

{
    "initial": null,
    "answer": 
    [
        {
            "date_purchased":null,
            "Tested": true,
            "RollId":12
        },
        {
        "date_purchased":null,
        "Tested": true,
        "RollId":16
        }

    ],
    "final": null

}

演示 Class

public class Demo {

    String initial;

    Object answer;

    String final;
}

我的 RestTemplate 实体

ResponseEntity<Demo> response = restTemplate.exchange(getURL1stAPI, HttpMethod.GET, entity, Demo.class);

我可以将答案用作对象数据类型,但我想将答案定义为 Std class 以更好地控制 it.But 问题是答案可以有许多不同的形式,如前所述在上面 JSON 个回复中。

public class answer_1 {

    Date date;

    String name;

    Set<String> allowed_values;

    String archived;
}

public class answer_2 {

    Date date_purchased;

    String Tested;

    int RollId
}

所以我可以通过在调用时提供 answer 的数据类型作为 answer_1 或 answer_2 来重复使用相同的演示 class restTemplate.But 我不知道该怎么做!

提前致谢,
周杰伦

您需要像这样修改您的演示 class

public class Demo {

    String initial;

    List<Object> answer;

    @JsonProperty("final")
    String finalValue;
}

要同时匹配 json。

  1. answer 是一个数组,因此您需要将其声明为列表。
  2. 不能使用 final 作为字段名,因为 final 是关键字。或者,您可以创建一些其他字段,如 finalValue,但使用 @JsonProperty
  3. 将 json final 映射到该字段