如何从 ResponseEntity 中提取对象列表?

How to extract List of objects from ResponseEntity?

这是我得到的 API 返回的员工列表。

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

我想从 ResponseEntity<String> 中提取 Employee 对象。

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

如何进行这项工作?

试试这个:

import com.fasterxml.jackson.databind.ObjectMapper;

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

另外如果用getForObject()代替exchange(),也可以直接获取Employee对象。是的,你不必传递 String.class 参数但 Employee.class

编辑(如果我想提取列表。该怎么做??)

所以有两种方法可以做到这一点。

[1] 使用包装器 class

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] 使用 ParameterizedTypeReference

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

如果 API 调用是 returning List of Employee objects as JSON 那么你可以直接将 JSON 解析为List<Employee> 使用 ParameterizedTypeReference

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

getBody() 将 return 响应正文

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