web-dev-qa-db-fra.com

Repos assuré. Est-il possible d'extraire une valeur de request json?

Je reçois une réponse de cette façon:

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

J'ai un json dans responseBody:

{"user_id":39}

Pourrais-je extraire en chaîne en utilisant la méthode de repos-assuré uniquement cette valeur = 39? 

39
Jay

J'ai trouvé la réponse :)

Utilisez JsonPath ou XmlPath (si vous avez du XML) pour obtenir des données du corps de la réponse.

Dans mon cas:

JsonPath jsonPath = new JsonPath(responseBody);
int user_id = jsonPath.getInt("user_id");
15
Jay

Vous pouvez aussi faire comme ceci si vous voulez extraire le "user_id":

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

Dans sa forme la plus simple, il ressemble à ceci:

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

Il y a plusieurs façons. Personnellement, j'utilise les suivants: 

extraire une valeur unique:

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

travaillez avec la réponse complète lorsque vous en avez besoin de plusieurs:

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

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

en extraire un en utilisant JsonPath pour obtenir le bon type:

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

Le dernier est vraiment utile lorsque vous voulez faire correspondre la valeur et le type i.e. 

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

La documentation repos-assurée est assez descriptive et complète. Il y a plusieurs façons de réaliser ce que vous demandez: https://github.com/jayway/rest-assured/wiki/Usage

16
magiccrafter

Pour sérialiser la réponse dans une classe, définissez la classe cible

public class Result {
    public Long user_id;
}

Et la réponse de la carte à cela:

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

Vous devez avoir Jackson ou Gson dans le classpath car la documentation indique: http://rest-assured.googlecode.com/svn/tags/2.3.1/apidocs/com/jayway/restassured/response/ResponseBodyExtractionOptions.html as (Java.lang.Class)

8
Milanka
JsonPath jsonPathEvaluator = response.jsonPath();
return jsonPathEvaluator.get("user_id").toString();
0