如何从 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();
这是我得到的 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();