2013-03-20 10 views
29

Lassen Sie uns sagen, dass ich eine Java Person Klasse:REST Assured - Generic Liste Deserialisierung

class Person { 
    String name; 
    String email; 
} 

Mit REST Assured können Sie dieses JSON-Objekt deserialisieren

{"name":"Bob", "email":"[email protected]"} 

auf eine Java Person Instanz mit

Person bob = given().when().get("person/Bob/").as(Person.class); 

Wie verwendet man REST Assured, um dieses JSON-Arra zu deserialisieren y

[{"name":"Bob", "email":"[email protected]"}, 
{"name":"Alice", "email":"[email protected]"}, 
{"name":"Jay", "email":"[email protected]"}] 

in eine List<Person>? Zum Beispiel wäre dies sehr nützlich sein:

List<Person> persons = given().when().get("person/").as(...); 
+4

+1 schön formatiert und gut gestellte Frage versuchen, . – Johan

Antwort

39

ich einen Weg gefunden, zu erreichen, was ich wollte:

List<Person> persons = given().when().get("person/").as(Person[].class); 

UPDATE: ReST-Assured 1.8.1, sieht aus wie Gussliste ist wird nicht mehr unterstützt. Sie müssen erklären und Objekt Array wie folgt:

Person[] persons = given().when().get("person/").as(Person[].class); 
+0

funktionierte nicht für mich mit java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.introspect.AnnotatedMethod.getParameterType (I). Gibt es Voraussetzungen für dieses Zeug? – Sarief

+1

Es funktioniert perfekt für mich. Ich verwende https://mvnrepository.com/artifect/io.rest-sured/rest-assured/3.0.1 – Ramu

+0

meine Version ist 2.4.1. Das könnte der Grund sein. – Sarief

6

Sie könnten auch dies tun, wenn Sie sich mit der „erwarten()“ interessiert waren

expect(). 
body("get(0).firstName", equalTo("Mike")). 
when(). 
get("person/"); 

Dies war mein Fall

+0

Danke. "get (0)" ist was ich brauchte. – asmaier

6

für diejenigen, Wer hat herausgefunden, dass die angenommene Antwort nicht mehr funktioniert?

List<Entity> list = new ArrayList<>(); 
    list = given() 
      .contentType(CONTENT_TYPE) 
     .when() 
      .get(getRestOperationPath()) 
     .then() 
      .extract().body().as(list.getClass()); 

hoffentlich verstehen Sie, dass getRestOperationPath den Restoperationspfad zurückgibt; und CONTENT_TYPE ist Platzhalter für Ihren Inhaltstyp (application/json zum Beispiel)

upd: überprüft verschiedene Versionen unterscheidet sich das Verhalten je nach Version, so dass Sie vielleicht verschiedene Ansätze

+2

Dies sollte die richtige Antwort sein. Sauber, einfach und die aktuellste Antwort. –

Verwandte Themen