使用Spring RestTemplate获取JSON对象的列表

问题

我有两个问题:

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

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


#1 热门回答(243 赞)

首先定义一个对象来保持实体返回数组...例如

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

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

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

上面的其他解决方案也可以工作,但我喜欢获取强类型列表而不是Object []。


#2 热门回答(160 赞)

也许这样......

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的扩展,增加了aHttpStatusstatus代码。用于RestTemplate和well@Controller方法。在RestTemplate这个班级由getForEntity()exchange()返回。


#3 热门回答(59 赞)

对我来说这很有效

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

Object是你想要的类