如何使用 RestTemplate 在 List 中获取结果并将响应放入 List?
Posted
技术标签:
【中文标题】如何使用 RestTemplate 在 List 中获取结果并将响应放入 List?【英文标题】:How to use RestTemplate to get result in List and put the response into List? 【发布时间】:2020-11-26 14:34:11 【问题描述】:嗨,我想要实现的是我想使用其他 API 并使用 RestTemplate 将一些响应数据放入我的函数中的 List,这是我的代码的样子:
@PostMapping("/save-new")
public ResponseEntity<ShipmentAddressGrouping> saveNewShipmentAddressGrouping(@Valid @RequestBody InputRequest<ShipmentAddressGroupingDto> request)
String url = baseUrl + "/load-list";
HttpEntity<PartnerShipmentDto> requestPartnerShipmentDto = new HttpEntity<>(new PartnerShipmentDto());
RestTemplate restTemplate = new RestTemplate();
List<PartnerShipmentDto> partnerShipmentDto = restTemplate.postForObject(url, requestPartnerShipmentDto, new ParameterizedTypeReference<List<PartnerShipmentDto>>() );
ShipmentAddressGrouping newShipmentAddressGrouping = shipmentAddressGroupingService.save(request);
return ResponseEntity.ok(newShipmentAddressGrouping);
如您所见,我尝试在 List 中获取响应,我在这里尝试restTemplate.postForObject(url, requestPartnerShipmentDto, new ParameterizedTypeReference<List<PartnerShipmentDto>>() );
但我在 restTemplate.postForObject 中得到如下下划线的错误:
方法 postForObject(String, Object, Class, Object...) 在 类型 RestTemplate 不适用于参数(字符串, HttpEntity,新 ParameterizedTypeReference())
我应该改变什么来解决这个问题?
【问题讨论】:
我自己没有尝试过postForObject
,但是从查看:docs.spring.io/spring-framework/docs/current/javadoc-api/org/… 看起来postForObject
的三进制for 需要第三个参数是responseType,所以List.class
会在你的情况下工作,但你会收到关于泛型的警告。
嗨@BillNaylor,它也对我有用,但是我收到了关于泛型的警告,我选择使用 Bernard 回答来使用交换而不是 postForObject,所以我也可以指定另一种方法,谢谢。我会找到 List.class 将来可以在哪里使用非常感谢你
我认为为了避免泛型警告,您可以将List<PartnerShipmentDto>
封装在您自己的类中,然后引用它。
【参考方案1】:
如果你想使用ParameterizedTypeReference<T>
,你需要使用RestTemplate.exchange()
,因为这是唯一暴露ParameterizedTypeReference<T>
类型参数的方法。
List<PartnerShipmentDto> partnerShipmentDto = restTemplate.exchange(url,
HttpMethod.GET,
requestPartnerShipmentDto,
new ParameterizedTypeReference<List<PartnerShipmentDto>>() )
.getBody();
【讨论】:
我认为您不需要使用交换功能.. postForObject 也可以解决问题以上是关于如何使用 RestTemplate 在 List 中获取结果并将响应放入 List?的主要内容,如果未能解决你的问题,请参考以下文章
spring RestTemplate发送请求返回值乱码问题解决心得
如何使用 spring 记录 RestTemplate 请求和响应?