Rassurez - vous, désérialiser Réponse JSON sous la forme d'une Liste<POJO>
J'ai un POJO Artwork
. Je suis à la récupération d'un List
de ces objets à partir d'un service web RESTful dans le corps de la réponse HTTP au format JSON. Je suis en train d'écrire un Repos Assuré à base de test qui permettrait d'analyser la liste retournée. Le code ressemble à ceci:
Response response = get("/artwork");
List returnedArtworks = response.getBody().as(List.class)
Le problème est, je ne peux pas me rassurez pour parser le JSON retourné comme List<Artwork>
. Au lieu de cela, je reçois un List<LinkedHashMap>
. La carte a une bonne structure, c'est à dire peuvent être cartographiées par Jackson à Artwork
objet, mais je voudrais éviter de cartographie manuellement.
JSON mappages dans mon modèle sont OK, parce que quand j'ai une carte unique objet comme ceci:
Artwork returnedArtwork = response.getBody().as(Artwork.class);
il fonctionne très bien.
Est-il possible d'obtenir returnedArtworks
comme List<Artwork>
?
OriginalL'auteur Wojtek | 2014-02-12
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire ceci:
L'astuce est de désérialiser JSON d'un tableau d'objets (car il n'y a pas de différence entre la chaîne JSON d'un tableau ou d'une liste), puis convertir le tableau à une liste.
Merci, j'ai ajouté une brève explication (et correction d'une erreur).
Ne peux pas le vérifier, mais en supposant que tous les upvotes provenant d'utilisateurs qui ont trouvé cette solution utile, je suis marquage ce accepté de répondre à
OriginalL'auteur
cette solution fonctionne pour la version 3.0.2 (io.restassured):
Cela va extraire les objets pour une structure comme ceci:
avec le json:
OriginalL'auteur
En utilisant Google Gson de la bibliothèque, vous pouvez facilement analyser pour
List<Artwork>
. Essayez de code ci-dessousList<Artwork> returnedArtworks = response.getBody().asListOf(Artwork.class)
Si votre œuvre d'art de classe est exactement la correspondance avec la carte que vous recevez de réponse, vous pouvez utiliser Gson au lieu de Jackson. Vous pouvez réutiliser la même œuvre d'art de classe.
Il n'a pas vraiment d'importance tant que ça si j'utilise Gson ou Jackson. Dans les deux cas, je dois écrire une ligne de code supplémentaire pour l'analyse de la carte reçue en réponse. J'espère que le Repos Assuré avait-il mis en œuvre en quelque sorte, comme c'est assez souvent que nous recevons un
List
des objets dans la réponse.OriginalL'auteur
Avec le REPOS assuré 3.0.2 vous pouvez simplement vérifier si le contenu existe dans le tableau
Cette façon, vous éviterez la complexité de votre code par la conversion de JSON à la liste plus d'exemples sur la façon de vérifier le contenu de la réponse peut être trouvée lien
OriginalL'auteur