返回ResponseEntity <List>返回的List <myObj>

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)


Rik*_*nin 9

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

查看 RestTemplate 类的文档

这是对我有用的代码

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)

希望它可以帮助某人。