如何在RestTemplate Spring中获取JSONArray列表

时间:2018-02-07 14:38:26

标签: java spring resttemplate

第一个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

}

演示班

public class Demo {

    String initial;

    Object answer;

    String final;
}

我的RestTemplate实体

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

我可以将答案用作Object数据类型,但我想将答案定义为Std类以获得对它的更多控制。但是答案可以有许多不同的形式,如上面的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
}

所以我可以通过在调用restTemplate时将 answer 的数据类型提供为answer_1或answer_2来重用同一个Demo类。但是我无法弄清楚如何做这!

提前致谢,

1 个答案:

答案 0 :(得分:0)

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

public class Demo {

    String initial;

    List<Object> answer;

    @JsonProperty("final")
    String finalValue;
}

要匹配两个json。

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