Obtener una lista de objetos JSON con Spring RestTemplate

Tengo dos preguntas:

  • Cómo mapear una lista de objetos JSON utilizando Spring RestTemplate.
  • Cómo mapear objetos JSON nesteds.

Estoy intentando consumir https://bitpay.com/api/rates , siguiendo el tutorial de http://spring.io/guides/gs/consuming-rest/ .

Quizás de esta manera …

ResponseEntity responseEntity = restTemplate.getForEntity(urlGETList, Object[].class); Object[] objects = responseEntity.getBody(); MediaType contentType = responseEntity.getHeaders().getContentType(); HttpStatus statusCode = responseEntity.getStatusCode(); 

Código de controlador para RequestMapping

 @RequestMapping(value="/Object/getList/", method=RequestMethod.GET) public @ResponseBody List findAllObjects() { List objects = new ArrayList(); return objects; } 

ResponseEntity es una extensión de HttpEntity que agrega un código de estado HttpStatus . Usado en RestTemplate y en los métodos @Controller . En RestTemplate getForEntity() e exchange() RestTemplate esta clase.

Primero defina un objeto para mantener a la entidad regresando en la matriz. Por ejemplo,

 @JsonIgnoreProperties(ignoreUnknown = true) public class Rate { private String name; private String code; private Double rate; // add getters and setters } 

Luego puede consumir el servicio y obtener una lista fuertemente tipada a través de:

 ResponseEntity> rateResponse = restTemplate.exchange("https://bitpay.com/api/rates", HttpMethod.GET, null, new ParameterizedTypeReference>() { }); List rates = rateResponse.getBody(); 

Las otras soluciones anteriores también funcionarán, pero me gusta obtener una lista fuertemente tipada en lugar de un Objeto [].

Para mí esto funcionó

 Object[] forNow = template.getForObject("URL", Object[].class); searchList= Arrays.asList(forNow); 

Donde Object es la clase que quieres

Después de múltiples pruebas, esta es la mejor forma que encontré 🙂

 Set test = httpService.get(url).toResponseSet(User[].class); 

Todo lo que necesitas allí

 public  Set toResponseSet(Class setType) { HttpEntity< ?> body = new HttpEntity<>(objectBody, headers); ResponseEntity response = template.exchange(url, method, body, setType); return Sets.newHashSet(response.getBody()); } 

Mi gran problema aquí fue construir la estructura Object necesaria para unir RestTemplate a una clase compatible. Afortunadamente, encontré http://www.jsonschema2pojo.org/ (obtenga la respuesta JSON en un navegador y utilícela como entrada) ¡y no puedo recomendarlo lo suficiente!

Encontré trabajo en esta publicación https://jira.spring.io/browse/SPR-8263 .

Según esta publicación, puede devolver una lista mecanografiada como esta:

 ResponseEntity< ? extends ArrayList> responseEntity = restTemplate.getForEntity(restEndPointUrl, (Class< ? extends ArrayList>)ArrayList.class, userId);