Uso correto de ParameterizedTypeReference

shirafuno:

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?

Javad Alimohammadi:

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

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=185511&siteId=1
Recomendado
Clasificación