J'ai deux questions:
- Comment mapper une liste d'objets JSON à l'aide de Spring RestTemplate.
- Comment mapper des objets JSON imbriqués.
J'essaie de consommer https://bitpay.com/api/rates , en suivant le tutoriel de http://spring.io/guides/gs/consuming-rest/ .
java
spring
resttemplate
Karudi
la source
la source
Réponses:
Peut-être de cette façon ...
Code de contrôleur pour le
RequestMapping
ResponseEntity
est une extensionHttpEntity
qui ajoute unHttpStatus
code d'état. Utilisé également dansRestTemplate
les@Controller
méthodes. DansRestTemplate
cette classe est retourné pargetForEntity()
etexchange()
.la source
Définissez d'abord un objet pour contenir l'entité qui revient dans le tableau. Par exemple
Ensuite, vous pouvez consommer le service et obtenir une liste fortement typée via:
Les autres solutions ci-dessus fonctionneront également, mais j'aime récupérer une liste fortement typée au lieu d'un objet [].
la source
restTemplate.exchange
marshallar mappe toutes les valeurs json aux noms de clé correspondants en tant que propriétés dans l'objet Rate. J'espère que mon processus de réflexion est correct.Pour moi, cela a fonctionné
Où Object est la classe que vous voulez
la source
Coupon[] coupons = restTemplate.getForObject( url, Coupon[].class)
[]
mais totalement vide). Soyez donc prudent et vérifieznull
(if (forNow != null)...
).Object.class
est spécifié dans la méthodegetForObject()
.Après plusieurs tests, c'est le meilleur moyen que j'ai trouvé :)
Tout ce dont vous avez besoin
la source
Mon gros problème ici était de construire la structure d'objet requise pour faire correspondre RestTemplate à une classe compatible. Heureusement, j'ai trouvé http://www.jsonschema2pojo.org/ (obtenez la réponse JSON dans un navigateur et utilisez-la comme entrée) et je ne peux pas le recommander assez!
la source
j'ai en fait développé quelque chose de fonctionnel pour l'un de mes projets avant et voici le code:
J'espère que cela aidera quelqu'un!
la source
Si vous préférez une liste d'objets, une façon de le faire est la suivante:
Et utilisez-le comme ceci:
Des explications sur ce qui précède peuvent être trouvées ici ( https://www.baeldung.com/spring-rest-template-list ) et sont paraphrasées ci-dessous.
"Il y a quelques choses qui se passent dans le code ci-dessus. Premièrement, nous utilisons ResponseEntity comme type de retour, en l'utilisant pour envelopper la liste des objets que nous voulons vraiment. Deuxièmement, nous appelons RestTemplate.exchange () au lieu de getForObject () .
Il s'agit de la manière la plus générique d'utiliser RestTemplate. Il nous oblige à spécifier la méthode HTTP, le corps de requête facultatif et un type de réponse. Dans ce cas, nous utilisons une sous-classe anonyme de ParameterizedTypeReference pour le type de réponse.
Cette dernière partie est ce qui nous permet de convertir la réponse JSON en une liste d'objets de type approprié. Lorsque nous créons une sous-classe anonyme de ParameterizedTypeReference, elle utilise la réflexion pour capturer des informations sur le type de classe dans lequel nous voulons convertir notre réponse.
Il conserve ces informations à l'aide de l'objet Type de Java, et nous n'avons plus à nous soucier de l'effacement des types. "
la source
Envisagez de voir cette réponse, surtout si vous souhaitez utiliser des génériques dans
List
Spring RestTemplate et des types génériques dans les collections ParameterizedTypeReference comme List <T>la source
Vous pouvez créer POJO pour chaque entrée comme,
puis en utilisant ParameterizedTypeReference of List of BitPay vous pouvez utiliser comme:
la source
J'ai trouvé du travail autour de ce post https://jira.spring.io/browse/SPR-8263 .
Sur la base de ce message, vous pouvez renvoyer une liste dactylographiée comme ceci:
la source
getForEntity
.(Class<? extends ArrayList<User>>) ArrayList.class
Donne également une erreur de compilation "types incompatibles".