Ottieni l’elenco degli oggetti JSON con Spring RestTemplate

Ho due domande:

  • Come mappare un elenco di oggetti JSON usando Spring RestTemplate.
  • Come mappare oggetti JSON nidificati.

Sto cercando di utilizzare https://bitpay.com/api/rates seguendo il tutorial di http://spring.io/guides/gs/consuming-rest/ .

Forse in questo modo …

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

Codice controller per RequestMapping

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

ResponseEntity è un’estensione di HttpEntity che aggiunge un codice di stato HttpStatus . Utilizzato anche in RestTemplate come metodo @Controller . In RestTemplate questa class viene restituita da getForEntity() e exchange() .

Prima definisci un object per mantenere l’entity framework rientrante nell’array .. es

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

Quindi puoi consumare il servizio e ottenere un elenco fortemente digitato tramite:

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

Anche le altre soluzioni sopra funzioneranno, ma mi piace ottenere una lista fortemente tipizzata anziché un object [].

Per me questo ha funzionato

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

Dove Object è la class che desideri

Dopo più test, questo è il modo migliore che ho trovato 🙂

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

Tutto ciò che serve lì

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

Il mio grosso problema qui è stato quello di build la struttura dell’object necessaria per abbinare RestTemplate a una class compatibile. Fortunatamente ho trovato http://www.jsonschema2pojo.org/ (ottieni la risposta JSON in un browser e la uso come input) e non posso raccomandarla abbastanza!

Ho trovato lavoro da questo post https://jira.spring.io/browse/SPR-8263 .

Sulla base di questo post è ansible restituire un elenco digitato come questo:

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