我的REST客户端使用RestTemplate来获取对象列表。
ResponseEntitiy<List> res = restTemplate.postForEntity(getUrl(), myDTO, List.class);
现在我想使用返回的列表并将其作为List返回给调用类。在字符串的情况下,可以使用toString,但列表的工作是什么?
答案 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对象。
这是对我有用的代码
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();
}