Как извлечь список объектов из ResponseEntity?

Это мой get API, возвращающий список сотрудников.

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/get")
public List<Employee> getEmployee() {
    return employeeFacade.getAllEmployee();
}

Я хочу извлечь объект Employee из ResponseEntity<String>.

RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
//headers.setContentType(MediaType.APPLICATION_JSON);

Employee employee = new Employee();

HttpEntity<Employee> entity = new HttpEntity<Employee>(employee, headers);
ResponseEntity<String> result = restTemplate.exchange(uri, HttpMethod.GET, entity, String.class);

System.out.println("result:" + result);

Как заставить это работать?

А ваш вопрос....?

Turing85 20.07.2019 19:07

Можем ли мы посмотреть на ваш ответ json?

Coder 20.07.2019 19:09

Почему вы используете String.classэто то, что вам нужно, это сотрудник, а не строка?

JB Nizet 20.07.2019 22:54

если я использую employee.class, это дает ошибку, потому что я хочу извлечь список сотрудников, а не одного сотрудника. извините, что не упомянул об этом

mayur singhal 21.07.2019 07:52

Вы можете передать 'new ParameterizedTypeReference<List<Employee>>() {}'

Avinash Gupta 21.07.2019 09:26
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
11 899
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуй это :

import com.fasterxml.jackson.databind.ObjectMapper;

Employee employee = new ObjectMapper().readValue(result.getBody(), Employee.class);

Кроме того, если вы используете getForObject() вместо exchange(), вы также можете напрямую получить объект Employee. Да, вам не нужно передавать String.class аргумент, но Employee.class

РЕДАКТИРОВАТЬ (если я хочу извлечь список. Как это сделать ??)

Таким образом, есть два способа сделать то же самое.

[1] Используйте класс-оболочку

public class EmployeeList {
    private List<Employee> employees;

    public EmployeeList() {
        employees = new ArrayList<>();
    }

    // standard constructor and getter/setter
}
ResponseEntity<EmployeeList> result = restTemplate.exchange(uri, HttpMethod.GET, entity, EmployeeList.class);

[2] Используйте параметризованный тип ссылки

ResponseEntity<List<Employee>> result = restTemplate.exchange(uri, HttpMethod.GET, entity,  new ParameterizedTypeReference<List<Employee>>() {});
List<Employee> emps = result.getBody();

Создание нового ObjectMapper для каждого ответа — дорогая и плохая практика.

Toerktumlare 21.07.2019 00:38

Вот почему я дал другое решение

Avinash Gupta 21.07.2019 01:10

Какова наилучшая практика? Кстати

Avinash Gupta 21.07.2019 01:13

Поскольку это всего лишь фрагмент кода, а не целая программа, вы можете объявить ObjectMapper статическим. Это потокобезопасно. закрытый окончательный ObjectMapper mapper = new ObjectMapper();

Avinash Gupta 21.07.2019 01:19

если я хочу извлечь list<Employee>. как это сделать??

mayur singhal 21.07.2019 07:57

Лучшей практикой в ​​​​приложении для загрузки Spring является @Autowire в объектном отображении по умолчанию, которое Spring уже имеет.

Toerktumlare 21.07.2019 09:38
Ответ принят как подходящий

Если вызов API возвращает List из Employee объектов в виде JSON, вы можете напрямую преобразовать этот JSON в List<Employee> объект, используя ParameterizedTypeReference

ResponseEntity<List<Employee>> result = restTemplate.exchange(uri, HttpMethod.GET, entity,  new ParameterizedTypeReference<List<Employee>>() {});

getBody() вернет тело ответа

List<Employee> emps = result.getBody();

Другие вопросы по теме