RestTemplate:返回实体列表

Posted

技术标签:

【中文标题】RestTemplate:返回实体列表【英文标题】:RestTemplate: returning a List of Entities 【发布时间】:2018-11-05 12:59:44 【问题描述】:

有一个 RestFull 方法可以返回一个菜单对象列表

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

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

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

【问题讨论】:

【参考方案1】:

我一直在尝试提出一些通用方法来封装这些功能并在我当前的项目中使用它。 最后我发现了如何做到这一点。

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

【讨论】:

【参考方案2】:

试试这个,它对我在 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();
     

【讨论】:

【参考方案3】:

尝试使用ParameterizedTypeReference

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

【讨论】:

上述方法中的实体是什么?

以上是关于RestTemplate:返回实体列表的主要内容,如果未能解决你的问题,请参考以下文章

一起学 Spring 之 RestTemplate

关于Hystrix超时机制和线程状态的测试观察和个人理解

使用 Ribbon 实现客户端侧负载均衡

Spring RestTemplate在尝试反序列化嵌套的对象列表时返回null对象

Spring/RestTemplate - PUT 实体到服务器

跟我学Spring Cloud(Finchley版)-09-Feign