Вернуть список <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()