用Spring RestTemplate获取JSON对象列表

我有两个问题:

  • 如何使用Spring RestTemplate映射JSON对象的列表。
  • 如何映射嵌套的JSON对象。

我试图通过遵循http://spring.io/guides/gs/consuming-rest/中的教程来使用https://bitpay.com/api/rates 。

也许这样…

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

RequestMapping控制器代码

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

ResponseEntityHttpEntity的扩展,增加了一个HttpEntity状态码。 用于RestTemplate以及@Controller方法。 在RestTemplate这个类由getForEntity()exchange()

首先定义一个对象来保存数组返回的实体

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

然后,您可以使用该服务,并通过以下方式获取强types列表:

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

上面的其他解决scheme也将工作,但我喜欢得到一个强types的列表,而不是一个对象[]。

对我来说这工作

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

哪里对象是你想要的类

经过多次testing,这是我发现的最佳方式:)

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

所有你需要在那里

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

我从这个postfind了解决办法https://jira.spring.io/browse/SPR-8263

根据这篇文章,你可以返回一个类似于这样的列表:

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