Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringBootRESTTemplateList_Java_Json_Spring - Fatal编程技术网

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();