2014-01-16 3 views
28

Ich erhalte Antwort auf diese Weise:Ruhig versichert. Ist es möglich, den Wert von Anfrage json zu extrahieren?

Response response = expect().statusCode(200).given().body(requestBody).contentType("application/json") 
.when().post("/admin"); 
String responseBody = response.getBody().asString(); 

ich eine json in Response haben:

{"user_id":39} 

Könnte ich auf String mit Rest-assured Methode extrahieren nur diesen Wert = 39?

+0

Suchen Sie nach Informationen zum JSON in Java zu analysieren - um die JSON (in Ihrem Fall) in eine Karte zu konvertieren. Du wirst leider ungefähr 20 verschiedene Wege finden, es zu tun, die meisten davon sind zu kompliziert, aber die Java-Gurus scheinen es so zu mögen. –

+0

Danke, @HotLicks, ich wusste diese Entscheidung, ich suchte nur mit Ruhe-versichert. Es sieht so aus, als könnte es das nicht tun. – Jay

Antwort

14

fand ich die Antwort :)

Verwenden JsonPath oder XmlPath (falls Sie XML haben), um Daten aus dem Antwort Körper.

In meinem Fall:

JsonPath jsonPath = new JsonPath(responseBody); 
int user_id = jsonPath.getInt("user_id"); 
+0

in der Tat, in der offiziellen Dokumentation: https://code.google.com/p/rest-assured/wiki/Usage#JSON_(using_JsonPath_) – emgsilva

+2

Das ist nur plain vanilla JSON Zugriff. Was ein JSON-Kit tun würde. –

35

Sie können auch so tun, wenn Sie nur daran interessiert sind, die "user_id" zu extrahieren:

String userId = 
given(). 
     contentType("application/json"). 
     body(requestBody). 
when(). 
     post("/admin"). 
then(). 
     statusCode(200). 
extract(). 
     path("user_id"); 

In seiner einfachsten Form sieht es so aus:

String userId = get("/person").path("person.userId"); 
7

Um die Antwort in eine Klasse serialisiert, definieren die Zielklasse

public class Result { 
    public Long user_id; 
} 

Und Karte Antwort darauf:

Response response = given().body(requestBody).when().post("/admin"); 
Result result = response.as(Result.class); 

Sie müssen Jackson oder Gson im Classpath haben wie die Dokumentation heißt es: http://rest-assured.googlecode.com/svn/tags/2.3.1/apidocs/com/jayway/restassured/response/ResponseBodyExtractionOptions.html#as(java.lang.Class)

9

Es gibt mehrere Möglichkeiten. Ich persönlich benutze die folgenden:

einzelnen Wert zu extrahieren:

String user_Id = 
given(). 
when(). 
then(). 
extract(). 
     path("user_id"); 

Arbeit mit der gesamten Reaktion, wenn Sie mehr als ein:

Response response = 
given(). 
when(). 
then(). 
extract(). 
     response(); 

String userId = response.path("user_id"); 

Extrakt man die JsonPath mit dem Recht zu erhalten Typ:

long userId = 
given(). 
when(). 
then(). 
extract(). 
     jsonPath().getLong("user_id"); 

Letzte ist wirklich nützlich, wenn Sie gegen th übereinstimmen möchten Der Wert und der Typ, d.h.

assertThat(
    when(). 
    then(). 
    extract(). 
      jsonPath().getLong("user_id"), equalTo(USER_ID) 
); 

Die rest-gesicherte Dokumentation ist ziemlich beschreibend und voll. Es gibt viele Möglichkeiten zu erreichen, was Sie fragen: https://github.com/jayway/rest-assured/wiki/Usage

Verwandte Themen