У меня есть два вопроса:
- Как отобразить список объектов JSON с помощью Spring RestTemplate.
- Как отобразить вложенные объекты JSON.
Я пытаюсь использовать https://bitpay.com/api/rates , следуя руководству по http://spring.io/guides/gs/consuming-rest/ .
java
spring
resttemplate
Karudi
источник
источник
Ответы:
Может быть, так ...
Код контроллера для
RequestMapping
ResponseEntity
является расширением,HttpEntity
которое добавляетHttpStatus
код состояния. ИспользуютсяRestTemplate
также и@Controller
методы. ВRestTemplate
этом классе возвращаетсяgetForEntity()
иexchange()
.источник
Сначала определите объект для хранения сущности, возвращающейся в массив .. например
Затем вы можете воспользоваться услугой и получить строго типизированный список через:
Другие решения выше также будут работать, но мне нравится возвращать строго типизированный список вместо Object [].
источник
restTemplate.exchange
маршаллар сопоставляет все значения json с соответствующими именами ключей как свойства в объекте Rate. Надеюсь, мой мыслительный процесс правильный.Для меня это сработало
Где Object - это класс, который вы хотите
источник
Coupon[] coupons = restTemplate.getForObject( url, Coupon[].class)
[]
но не полностью пустым). Так что будьте осторожны и проверьте наличиеnull
(if (forNow != null)...
).Object.class
указан в методеgetForObject()
.После нескольких тестов, это лучший способ, который я нашел :)
Все что вам нужно там
источник
Моя большая проблема заключалась в том, чтобы создать структуру Object, необходимую для соответствия RestTemplate совместимому классу. К счастью, я нашел http://www.jsonschema2pojo.org/ (получить ответ JSON в браузере и использовать его в качестве входных данных), и я не могу рекомендовать это достаточно!
источник
я на самом деле разработал что-то функциональное для одного из моих проектов, и вот код:
Надеюсь, это кому-нибудь поможет!
источник
Если вы предпочитаете список объектов, один из способов сделать это так:
И используйте это так:
Объяснение вышесказанного можно найти здесь ( https://www.baeldung.com/spring-rest-template-list ) и перефразировано ниже.
«В приведенном выше коде происходит несколько вещей. Во-первых, мы используем ResponseEntity в качестве возвращаемого типа, используя его для переноса списка объектов, которые нам действительно нужны. Во-вторых, мы вызываем RestTemplate.exchange () вместо getForObject (). ,
Это наиболее общий способ использования RestTemplate. Требуется указать метод HTTP, необязательное тело запроса и тип ответа. В этом случае мы используем анонимный подкласс ParameterizedTypeReference для типа ответа.
Эта последняя часть - это то, что позволяет нам преобразовать ответ JSON в список объектов соответствующего типа. Когда мы создаем анонимный подкласс ParameterizedTypeReference, он использует отражение для сбора информации о типе класса, в который мы хотим преобразовать наш ответ.
Он сохраняет эту информацию с помощью Java-объекта Type, и нам больше не нужно беспокоиться об удалении типов ».
источник
Рассмотрим этот ответ, особенно если вы хотите использовать обобщенные значения в
List
Spring RestTemplate и универсальные типы коллекций ParameterizedTypeReference, например List <T>источник
Вы можете создать POJO для каждой записи, как,
затем с помощью ParameterizedTypeReference списка BitPay вы можете использовать как:
источник
Я нашел обходной путь из этого поста https://jira.spring.io/browse/SPR-8263 .
На основании этого поста вы можете вернуть напечатанный список, например так:
источник
getForEntity
. Также(Class<? extends ArrayList<User>>) ArrayList.class
выдает ошибку компиляции «несовместимых типов».