Подтвердить что ты не робот

Будьте уверены. Можно ли извлечь значение из запроса json?

Я получаю ответ таким образом:

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

У меня есть json в ответеBody:

{"user_id":39}

Могу ли я извлечь строку, используя метод rest-secure, только это value = 39?

4b9b3361

Ответ 1

Я нашел ответ:)

Используйте JsonPath или XmlPath (если у вас есть XML), чтобы получать данные из тело реакции.

В моем случае:

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

Ответ 2

Вы также можете сделать это, если вас интересует только извлечение "user_id":

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

В простейшей форме это выглядит так:

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

Ответ 3

Существует несколько способов. Я лично использую следующие:

извлечение единственного значения:

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

работайте со всем ответом, когда вам нужно больше одного:

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

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

извлеките один, используя JsonPath, чтобы получить правильный тип:

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

Последний действительно полезен, если вы хотите сопоставить его с типом i.e.

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

Документация с остальными документами достаточно описательная и полная. Есть много способов добиться того, что вы спрашиваете: https://github.com/jayway/rest-assured/wiki/Usage

Ответ 4

Чтобы сериализовать ответ в классе, определите целевой класс

public class Result {
    public Long user_id;
}

И ответьте на него:

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

У вас должен быть Jackson или Gson в пути к классам, поскольку в документации указано: http://rest-assured.googlecode.com/svn/tags/2.3.1/apidocs/com/jayway/restassured/response/ResponseBodyExtractionOptions.html#as(java.lang.Class)