Java SpringBootRESTTemplateList
我得到的回应如下:Java SpringBootRESTTemplateList,java,json,spring,Java,Json,Spring,我得到的回应如下: { "data":[ { "object1":"example", "object2":"example", "object3":"example", "object4":"example", "object5":"example" }, { "object1":"example", "obje
{
"data":[
{
"object1":"example",
"object2":"example",
"object3":"example",
"object4":"example",
"object5":"example"
},
{
"object1":"example",
"object2":"example",
"object3":"example"
}
]
}
现在我想把这个数据映射到我的类DTO,但是在那里我得到了一个“错误”,因为DTO没有数据
字段。我希望它在我的类的列表或数组中。
比如:
List List=restemplate.getForObject(url,MyClass.class);
我希望您知道我的意思。我想到的一种方法是将JSON响应转换为映射
,然后查询映射,即Map.get(“数据”)
,以获得实际的列表
为了将JSON响应转换为Map
,您需要定义一个类型引用:
最后:
System.out.println(response.getBody().get("data"));
<如果你想知道为什么我们需要一个类型参考,考虑阅读Neal Gafter的帖子。
更新:如果要反序列化以下架构:
{
"data": [],
"paging": {}
}
最好创建一个哑容器类,如下所示:
ResponseEntity<Map<String, List<MyClass>>> response =
restTemplate.exchange(url, HttpMethod.GET, null, typeRef);
class JsonHolder {
private List<MyClass> data;
private Object paging; // You can use custom type too.
// Getters and setters
}
您可以使用Spring的ResponseEntity和MyClass的数组。下面的代码将返回一个环绕的MyClass数组
例如
ResponseEntity<MyClass[]> response = restTemplate.exchange(
url,
HttpMethod.GET,
request,
MyClass[].class
);
...
// response null check etc. goes here
...
MyClass[] myArr = response.getBody();
ResponseEntity response=restemplate.exchange(
网址,
HttpMethod.GET,
要求
MyClass[]类
);
...
//响应空检查等在这里
...
MyClass[]myArr=response.getBody();
我认为您的响应json是错误的,因为数据[0]中的键是mulltiple,这是错误的。我们知道json应该有唯一的密钥。值可以相同。您只需复制上面的json并将其放在json编辑器中,然后您可能会意识到我的意思是json对象是有效的,我只是用“parma”进行了编辑,实际上还有其他对象。我认为您需要获取映射并将所有键放在其中,然后将此映射放在列表中,并且您的DTO包含这些object1
,object2
。。。属性?谢谢,我如何将其映射到变量列表?我可以想到任何只涉及restemplate
的解决方案。我想您应该直接使用Jackson并手动反序列化JSON字符串,以列出另一个问题,当我在“数据”集之后有另一个结构时,我该如何处理?与使用ParameteredTypeReference的+1类似,我一开始创建了一个“MyClassList扩展列表”对象,然后将MyClassList.class作为返回类型,但这要干净得多
class JsonHolder {
private List<MyClass> data;
private Object paging; // You can use custom type too.
// Getters and setters
}
JsonHolder response = restTemplate.getForObject(url, JsonHolder.class);
System.out.println(response.getData()); // prints a List<MyClass>
System.out.println(response.getPaging()); // prints an Object
ResponseEntity<MyClass[]> response = restTemplate.exchange(
url,
HttpMethod.GET,
request,
MyClass[].class
);
...
// response null check etc. goes here
...
MyClass[] myArr = response.getBody();