Вернуть список <myObj>, возвращаемый ResponseEntity <List>
Мой клиент REST использует RestTemplate для получения списка объектов.
ResponseEntitiy<List> res = restTemplate.postForEntity(getUrl(), myDTO, List.class);
Теперь я хочу использовать возвращенный список и вернуть его как List в вызывающий класс. В случае строки можно использовать toString, но что такое работа для списков?
Ответы
Ответ 1
Прежде всего, если вы знаете тип элементов в своем списке, вы можете использовать класс 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>>() {});
Ответ 2
Я не мог принять принятый ответ на работу. Кажется, что postForEntity
больше не имеет этой сигнатуры метода. Вместо этого мне пришлось использовать restTemplate.exchange()
:
ResponseEntity<List<MyObj>> res = restTemplate.exchange(getUrl(), HttpMethod.POST, myDTO, new ParameterizedTypeReference<List<MyObj>>() {});
Затем, чтобы вернуть список, как указано выше:
return res.getBody();
Ответ 3
В последней версии (Spring Framework 5.1.6) оба ответа не работают. Как упомянул в своем ответе postForEntity
подпись метода postForEntity
изменилась. Также restTemplate.exchange()
и его перегрузкам требуется объект RequestEntity<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();
Надеюсь, это кому-нибудь поможет.
Ответ 4
Вы развернули ResponseEntity и можете получить объект (список)
res.getBody()