RestTemplate:返回实体列表

RestTemplate: returning a List of Entities

有一个 RestFull 方法 return 菜单对象列表

public ResponseEntity<List<Menu>> getMenus() {
..
}

但我不知道如何从 RestTemplate 获取它们,从 ResponseEntity>

获取 class
ResponseEntity<List<Menu>> response = restTemplate
                  .exchange("http://127.0.0.1:8080/elcor/api/users/1/menus", HttpMethod.GET, entity,  ResponseEntity<List<Menu>>.getClass());

尝试使用 ParameterizedTypeReference

ResponseEntity<List<Menu>> response = restTemplate
       .exchange("URI", HttpMethod.GET, entity,  new ParameterizedTypeReference<List<Menu>>() {
 });

试试这个,它对我有用,可以在 Spring

中使用 RestTemplate 获取对象列表
    RestTemplate restTemplate = new RestTemplate();
    try {
        ResponseEntity<List<Claim>> claimResponse = restTemplate.exchange(
                uri, 
                HttpMethod.GET,
                null,
                new ParameterizedTypeReference<List<Claim>>() {});
        if(claimResponse != null && claimResponse.hasBody()){
            claims = claimResponse.getBody();
        }
    } catch (RestClientException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 

我一直在尝试想出一些通用的方法来封装此类功能并在我当前的项目中使用它。 我终于找到了如何做到这一点。

public static <T> List<T> getForList(RestTemplate restTemplate, String url, Class<T> cls, Object... uriVariables) {
    ObjectMapper mapper = new ObjectMapper();
    CollectionType type = mapper.getTypeFactory().constructCollectionType(List.class, cls);
    return restTemplate.<List<T>>exchange(url, HttpMethod.GET, null,
                ParameterizedTypeReference.forType(type), uriVariables)
        .getBody();
}