问题描述
我得到这样的回复:
{
"data":[
{
"object1":"example",
"object2":"example",
"object3":"example",
"object4":"example",
"object5":"example"
},
{
"object1":"example",
"object2":"example",
"object3":"example"
}
]
}
现在我我希望将这些数据映射到我的类DTO,但是我得到一个错误,因为DTO没有数据
字段。我希望它在 List
或我的类的数组中。
赞:
Now I wanted to Map this data to my class DTO but there I get an "error" because the DTO has no data
field. I want it in a List
or Array of my class.Like:
List<MyClass> list = restTemplate.getForObject(url, MyClass.class);
我希望你知道我的意思吗?
I hope you know what I mean?
推荐答案
我想到的一种方法是将JSON响应转换为 Map< String,List< MyClass>>
然后查询地图,即 map.get(data)
,以获得实际的列表< MyClass>
。
One approach comes to mind is to convert the JSON response to a Map<String, List<MyClass>>
and then query the map, i.e. map.get("data")
, to get the actual List<MyClass>
.
为了将JSON响应转换为 Map< String,List< MyClass>>
,您需要定义类型引用:
In order to convert the JSON response to Map<String, List<MyClass>>
, you need to define a Type Reference:
ParameterizedTypeReference<Map<String, List<MyClass>>> typeRef =
new ParameterizedTypeReference<Map<String, List<MyClass>>>() {};
然后将 typeRef
传递给 exchange
方法如下:
Then pass that typeRef
to the exchange
method like the following:
ResponseEntity<Map<String, List<MyClass>>> response =
restTemplate.exchange(url, HttpMethod.GET, null, typeRef);
最后:
System.out.println(response.getBody().get("data"));
如果您想知道为什么我们需要类型参考,请考虑阅读Neal Gafter关于的帖子 。
If you're wondering why we need a type reference, consider reading Neal Gafter's post on Super Type Tokens.
更新:如果您要反序列化以下架构:
Update: If you're going to deserialize the following schema:
{
"data": [],
"paging": {}
}
最好创建一个如下所示的哑容器类:
It's better to create a dumb container class like the following:
class JsonHolder {
private List<MyClass> 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<MyClass>
System.out.println(response.getPaging()); // prints an Object
这篇关于Spring Boot RestTemplate列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!