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?
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>>() {});
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();
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é.
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.
Vous avez déballé ResponseEntity et vous pouvez obtenir l'objet (liste)
res.getBody()