Em um teste Desejo atingiu um ponto final que retorna uma lista de um tipo. Atualmente tenho
@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
}
O problema para o método getForObject é o ParameterizedTypeReference torna o método getForObject não resolver, como os tipos não coincidem.
O problema para o método de troca é tipos incompatíveis. Lista necessários mas 'troca' foi inferida a ResponseEntity: nenhuma instância (s) do tipo de variável (s) existem para que conforma ResponseEntity a lista
Como eu poderia usar o ParameterizedTypeReference correctamente nesta situação com segurança retornar o tipo de lista que eu quero?
A partir da documentação :
Executar o método HTTP para o determinado modelo URI, escrevendo a entidade solicitação dada ao pedido e retorna a resposta como ResponseEntity. O dado ParameterizedTypeReference é usado para passar informações de tipo genérico:
ParameterizedTypeReference<List<MyBean>> myBean = new ParameterizedTypeReference<List<MyBean>>() {}; ResponseEntity<List<MyBean>> response = template.exchange("http://example.com",HttpMethod.GET, null, myBean);
Assim, no seu caso, você pode:
ResponseEntity<List<Example>> actualExample = restTemplate.exchange(targetUrl, HttpMethod.GET, null, new ParameterizedTypeReference<List<Example>>() {});
List<Example> exampleList = actualExample.getBody();