返回ResponseEntity <list> </list> </myobj>返回的List <myobj>

时间:2014-08-18 01:25:57

标签: java rest spring-mvc restful-architecture resttemplate

我的REST客户端使用RestTemplate来获取对象列表。

ResponseEntitiy<List> res = restTemplate.postForEntity(getUrl(), myDTO, List.class);

现在我想使用返回的列表并将其作为List返回给调用类。在字符串的情况下,可以使用toString,但列表的工作是什么?

5 个答案:

答案 0 :(得分:14)

首先,如果你知道列表中的元素类型,你可能想要使用ParameterizedTypeReference类。

ResponseEntity<List<MyObj>> res = restTemplate.postForEntity(getUrl(), myDTO, new ParameterizedTypeReference<List<MyObj>>() {});

然后,如果您只想返回列表,您可以这样做:

return res.getBody();

如果你关心的只是清单,你可以这样做:

// postForEntity returns a ResponseEntity, postForObject returns the body directly.
return restTemplate.postForObject(getUrl(), myDTO, new ParameterizedTypeReference<List<MyObj>>() {});

答案 1 :(得分:9)

我无法得到已接受的工作答案。似乎postForEntity不再具有此方法签名。我不得不改为使用restTemplate.exchange()

ResponseEntity<List<MyObj>> res = restTemplate.exchange(getUrl(), HttpMethod.POST, myDTO, new ParameterizedTypeReference<List<MyObj>>() {});

然后返回列表,如上所述:

return res.getBody();

答案 2 :(得分:1)

在最新版本(Spring Framework 5.1.6)中,两个答案均不起作用。 正如kaybee99在他的answer postForEntity方法签名中所提到的那样。 此外,restTemplate.exchange()方法及其重载也需要一个RequestEntity<T>或其父对象HttpEntity<T>对象。如上所述,无法传递我的DTO对象。

  

Checkout the documentation of the RestTemplate class

这是对我有用的代码

List<Shinobi> shinobis = new ArrayList<>();
shinobis.add(new Shinobi(1, "Naruto", "Uzumaki"));
shinobis.add(new Shinobi(2, "Sasuke", "Uchiha");
RequestEntity<List<Shinobi>> request = RequestEntity
            .post(new URI(getUrl()))
            .accept(MediaType.APPLICATION_JSON)
            .contentType(MediaType.APPLICATION_JSON)
            .body(shinobis);
ResponseEntity<List<Shinobi>> response = restTemplate.exchange(
            getUrl(), 
            HttpMethod.POST, 
            request, 
            new ParameterizedTypeReference<List<Shinobi>>() {}
            );
List<Shinobi> result = response.getBody();

希望它可以帮助某人。

答案 3 :(得分:0)

您已经打开了ResponseEntity,可以获取对象(列表)

 res.getBody()

答案 4 :(得分:0)

您可以使用Spring的 ParameterizedTypeReference 类将其转换为列出ResponseEntity返回的数据

ResponseEntity<List<MyObject>>  resp = restTemplate.exchange(url, HttpMethod.GET, null, new ParameterizedTypeReference<List<MyObject>>(){});

if(resp != null && resp.hasBody()){
   List<MyObject> myList = resp.getBody();
}