Получить список объектов 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);
где объект-это класс, который вы хотите
после нескольких тестов, это лучший способ, который я нашел :)
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);