gpt4 book ai didi

java - Spring RestTemplate 和泛型类型 ParameterizedTypeReference 集合,如 List

转载 作者:IT老高 更新时间:2023-10-28 20:28:15 25 4
gpt4 key购买 nike

抽象 Controller 类需要来自 REST 的对象列表。在使用 Spring RestTemplate 时,它​​没有将其映射到所需的类,而是返回 Linked HashMAp

 public List<T> restFindAll() {

RestTemplate restTemplate = RestClient.build().restTemplate();
ParameterizedTypeReference<List<T>> parameterizedTypeReference = new ParameterizedTypeReference<List<T>>(){};
String uri= BASE_URI +"/"+ getPath();

ResponseEntity<List<T>> exchange = restTemplate.exchange(uri, HttpMethod.GET, null,parameterizedTypeReference);
List<T> entities = exchange.getBody();
// here entities are List<LinkedHashMap>
return entities;

}

如果我使用,

ParameterizedTypeReference<List<AttributeInfo>>  parameterizedTypeReference = 
new ParameterizedTypeReference<List<AttributeInfo>>(){};
ResponseEntity<List<AttributeInfo>> exchange =
restTemplate.exchange(uri, HttpMethod.GET, null,parameterizedTypeReference);

它工作正常。但不能放入所有子类,任何其他解决方案。

最佳答案

我使用以下通用方法解决了这个问题:

public <T> List<T> exchangeAsList(String uri, ParameterizedTypeReference<List<T>> responseType) {
return restTemplate.exchange(uri, HttpMethod.GET, null, responseType).getBody();
}

然后我可以打电话:

List<MyDto> dtoList = this.exchangeAsList("http://my/url", new ParameterizedTypeReference<List<MyDto>>() {});

这确实让我的调用者在调用时不得不指定 ParameterizedTypeReference,但这意味着我不必像 vels4j 的答案那样保留类型的静态映射

关于java - Spring RestTemplate 和泛型类型 ParameterizedTypeReference 集合,如 List<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36915823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com