Получить список объектов JSON с Spring RestTemplate
У меня два вопроса:
- как отобразить список объектов JSON с помощью Spring RestTemplate.
- как сопоставить вложенные объекты JSON.
Я пытаюсь потреблять https://bitpay.com/api/rates, следуя учебнику из http://spring.io/guides/gs/consuming-rest/.
6 ответов
может быть этот путь...
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;
}
ResponseEntity
расширение HttpEntity
добавляет HttpStatus
код состояния. В RestTemplate
а также @Controller
методы.
В RestTemplate
этот класс возвращается getForEntity()
и exchange()
.
сначала определите объект для удержания сущности, возвращающейся в массив.. например,
@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[] forNow = template.getForObject("URL", Object[].class);
searchList= Arrays.asList(forNow);
где Object - класс, который вы хотите
после нескольких тестов это лучший способ, который я нашел:)
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());
}
моей большой проблемой здесь было создание структуры объекта, необходимой для соответствия RestTemplate совместимому классу. К счастью, я нашел http://www.jsonschema2pojo.org/ (получить ответ JSON в браузере и использовать его в качестве ввода), и я не могу рекомендовать это достаточно!
Я нашел работу вокруг этого поста https://jira.spring.io/browse/SPR-8263.
на основе этого сообщения Вы можете вернуть типизированный список следующим образом:
ResponseEntity<? extends ArrayList<User>> responseEntity = restTemplate.getForEntity(restEndPointUrl, (Class<? extends ArrayList<User>>)ArrayList.class, userId);