web-dev-qa-db-fra.com

Renvoyer la liste <myObj> renvoyée par ResponseEntity <List>

Mon client REST utilise RestTemplate pour obtenir une liste d'objets.

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

Maintenant, je veux utiliser la liste renvoyée et la renvoyer en tant que liste à la classe appelante. En cas de chaîne, toString pourrait être utilisé, mais quel est le travail autour des listes?

11
ND_27

Tout d'abord, si vous connaissez le type d'éléments dans votre liste, vous voudrez peut-être utiliser la classe ParameterizedTypeReference comme ça.

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

Ensuite, si vous souhaitez simplement renvoyer la liste, vous pouvez le faire:

return res.getBody();

Et si vous ne vous souciez que de la liste, vous pouvez simplement faire:

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

Je n'ai pas pu obtenir la réponse acceptée au travail. Il semble que postForEntity ne possède plus cette signature de méthode. J'ai dû utiliser restTemplate.exchange() à la place:

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

Puis pour retourner la liste, comme ci-dessus:

return res.getBody();
11
kaybee99

Dans la dernière version (Spring Framework 5.1.6), les deux réponses ne fonctionnent pas. Comme kaybee99 l'a mentionné dans sa réponsepostForEntity la signature de la méthode a été modifiée. De plus, la méthode restTemplate.exchange() et ses surcharges ont besoin d'un RequestEntity<T> ou son parent HttpEntity<T> objet. Impossible de passer mon objet DTO comme mentionné.

Consultez la documentation de la classe RestTemplate

Voici le code qui a fonctionné pour moi

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

J'espère que cela aide quelqu'un.

3
RikudouSennin

Vous avez déballé ResponseEntity et vous pouvez obtenir l'objet (liste)

 res.getBody()
0
kris