在测试中,我希望命中一个返回类型列表的端点。目前我有
@Test
public void when_endpoint_is_hit_then_return_list(){
//Given
ParameterizedTypeReference<List<Example>> responseType = new ParameterizedTypeReference<List<Example>>() {};
String targetUrl = "/path/to/hit/" + expectedExample.getParameterOfList();
//When
//This works however highlights an unchecked assignment of List to List<Example>
List<Example> actualExample = restTemplate.getForObject(targetUrl, List.class);
//This does not work
List<Example> actualExample = restTemplate.getForObject(targetUrl, responseType);
//This does not work either
List<Example> actualExample = restTemplate.exchange(targetUrl, HttpMethod.GET, null, new ParameterizedTypeReference<List<Example>>() {});
//Then
//Assert Results
}
getForObject方法的问题是ParameterizedTypeReference使getForObject方法无法解析,因为类型不匹配。
交换方法的问题是类型不兼容。必需的列表,但是“交换”被推断为ResponseEntity:不存在类型变量的实例,因此ResponseEntity符合List
在这种情况下如何正确使用ParameterizedTypeReference来安全返回我想要的列表类型?
答案 0 :(得分:3)
对给定的URI模板执行HTTP方法,写入给定的 请求实体到请求,并返回响应为 ResponseEntity。给定的ParameterizedTypeReference用于传递 通用类型信息:
ParameterizedTypeReference<List<MyBean>> myBean = new ParameterizedTypeReference<List<MyBean>>() {}; ResponseEntity<List<MyBean>> response = template.exchange("http://example.com",HttpMethod.GET, null, myBean);
因此,您可以:
ResponseEntity<List<Example>> actualExample = restTemplate.exchange(targetUrl, HttpMethod.GET, null, new ParameterizedTypeReference<List<Example>>() {});
List<Example> exampleList = actualExample.getBody();