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
传递给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