2013-03-20 14 views
29

Powiedzmy mam Java Person Klasa:być pewny - Generic Lista deserializacji

class Person { 
    String name; 
    String email; 
} 

Z pewny, można deserializować ten JSON obiektu

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

do Java Person przykład używając

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

W jaki sposób używać REST Zapewnia się deserializację tego JSON arra y

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

na List<Person>? Na przykład, byłoby to poręczny:

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

+1 ładnie sformatowany i dobrze zadawane pytanie . – Johan

Odpowiedz

39

znalazłem sposób, aby osiągnąć to, co chciałem:

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

UPDATE: Korzystanie Rest-Zapewniony 1.8.1, wygląda obsada na liście jest nie jest już obsługiwany. Trzeba zadeklarować i obiekt array tak:

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

nie działa dla mnie, z java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.introspect.AnnotatedMethod.getParameterType (I). Czy są jakieś warunki wstępne dla tych rzeczy? – Sarief

+1

Działa doskonale dla mnie. Korzystam z https://mvnrepository.com/artifact/io.rest-assured/rest-assured/3.0.1 – Ramu

+0

moja wersja to 2.4.1. więc to może być powód. – Sarief

6

Można też to zrobić, jeśli jesteś zainteresowany wykorzystaniem „oczekiwać()”

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

To była moja sprawa

+0

Dziękuję. "get (0)" jest tym, czego potrzebowałem. – asmaier

6

dla tych, kto dowiedział się, że zaakceptowana odpowiedź już nie działa.

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

mam nadzieję, że rozumiesz, że getRestOperationPath zwraca ścieżkę operacji odpoczynku; i CONTENT_TYPE jest zastępczy dla danego typu zawartości (application/json na przykład)

UPD: sprawdzone różne wersje, zachowanie różni się w zależności od wersji, więc warto wypróbować różne podejścia

+2

To powinna być poprawna odpowiedź. Czysta, prosta i najbardziej aktualna odpowiedź. –