ND_*_*_27 11 java rest spring-mvc resttemplate restful-architecture
我的REST客户端使用RestTemplate来获取对象列表.
ResponseEntitiy<List> res = restTemplate.postForEntity(getUrl(), myDTO, List.class);
Run Code Online (Sandbox Code Playgroud)
现在我想使用返回的列表并将其作为List返回给调用类.在字符串的情况下,可以使用toString,但列表的工作是什么?
Chr*_*e L 16
首先,如果您知道列表中的元素类型,您可能希望ParameterizedTypeReference像这样使用类.
ResponseEntity<List<MyObj>> res = restTemplate.postForEntity(getUrl(), myDTO, new ParameterizedTypeReference<List<MyObj>>() {});
Run Code Online (Sandbox Code Playgroud)
然后,如果您只想返回列表,您可以执行以下操作:
return res.getBody();
Run Code Online (Sandbox Code Playgroud)
如果你关心的只是清单,你可以这样做:
// postForEntity returns a ResponseEntity, postForObject returns the body directly.
return restTemplate.postForObject(getUrl(), myDTO, new ParameterizedTypeReference<List<MyObj>>() {});
Run Code Online (Sandbox Code Playgroud)
kay*_*e99 11
我无法得到公认的工作答案.似乎postForEntity不再有这种方法签名.我不得不使用restTemplate.exchange():
ResponseEntity<List<MyObj>> res = restTemplate.exchange(getUrl(), HttpMethod.POST, myDTO, new ParameterizedTypeReference<List<MyObj>>() {});
Run Code Online (Sandbox Code Playgroud)
然后返回列表,如上所示:
return res.getBody();
Run Code Online (Sandbox Code Playgroud)
在最新版本(Spring Framework 5.1.6)中,这两个答案都不起作用。正如 kaybee99 在他的回答 postForEntity方法中提到的那样签名被改变了。此外,该restTemplate.exchange()方法及其重载需要 aRequestEntity<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();
Run Code Online (Sandbox Code Playgroud)
希望它可以帮助某人。
| 归档时间: |
|
| 查看次数: |
33676 次 |
| 最近记录: |