Spring Boot RestTemplate列表

我收到这样的回复:

{ "data":[ { "object1":"example", "object2":"example", "object3":"example", "object4":"example", "object5":"example" }, { "object1":"example", "object2":"example", "object3":"example" } ] } 

现在我想将这些数据映射到我的类DTO,但是我得到一个“错误”,因为DTO没有data字段。 我希望它在我class级的List或Array中。 喜欢:

 List list = restTemplate.getForObject(url, MyClass.class); 

我希望你知道我的意思吗?

我想到的一种方法是将JSON响应转换为Map> ,然后查询地图,即map.get("data") ,以获得实际的List

要将JSON响应转换为Map> ,您需要定义类型引用

 ParameterizedTypeReference>> typeRef = new ParameterizedTypeReference>>() {}; 

然后将typeRef传递给exchange方法,如下所示:

 ResponseEntity>> response = restTemplate.exchange(url, HttpMethod.GET, null, typeRef); 

最后:

 System.out.println(response.getBody().get("data")); 

如果您想知道为什么我们需要类型参考,请考虑阅读Neal Gafter关于超类型标记的post。

更新 :如果您要反序列化以下架构:

 { "data": [], "paging": {} } 

最好创建一个如下所示的哑容器类:

 class JsonHolder { private List data; private Object paging; // You can use custom type too. // Getters and setters } 

然后在RestTemplate调用中使用它:

 JsonHolder response = restTemplate.getForObject(url, JsonHolder.class); System.out.println(response.getData()); // prints a List System.out.println(response.getPaging()); // prints an Object