Pytanie Bądź spokojny. Czy możliwe jest wyodrębnienie wartości z żądania json?


Otrzymuję odpowiedź w ten sposób:

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

Mam json w odpowiedziBody:

{"user_id":39}

Czy mogę wyodrębnić do łańcucha za pomocą metody rest-assured tylko tej wartości = 39?


34
2018-01-16 15:36


pochodzenie


Spróbuj wyszukać informacje o tym, jak przeanalizować JSON w Javie - aby przekonwertować JSON (w twoim przypadku) na mapę. Niestety, znajdziecie niestety około 20 różnych sposobów, z których większość jest zbyt skomplikowana, ale wydaje się, że guru Java podobają się w ten sposób. - Hot Licks
Dzięki, @HotLicks, znałem tę decyzję, szukałem odpowiedzi tylko z zapewnieniem spokoju. Wygląda na to, że nie może tego zrobić. - Jay
@Jay to stare pytanie, ale wydaje mi się, że jest źle oznakowane. Twój tytuł to "wyodrębnij wartość z żądania json", czy nie powinno to być "wyodrębnić etykietę z odpowiedzi"? Wszystkie poniższe odpowiedzi zakładają, że masz na myśli odpowiedź ... - mancocapac


Odpowiedzi:


Możesz też zrobić to, jeśli interesuje Cię tylko wyodrębnienie "user_id":

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

W najprostszej formie wygląda to tak:

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

39
2018-01-22 10:13





Znalazłem odpowiedź :)

Posługiwać się JsonPath lub XmlPath (jeśli masz XML), aby uzyskać dane z treści odpowiedzi.

W moim przypadku:

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

15
2018-01-17 09:53



w rzeczywistości w oficjalnej dokumentacji: code.google.com/p/rest-assured/wiki/... - emgsilva
To po prostu waniliowy dostęp do JSON. Co zrobiłby każdy zestaw JSON. - Hot Licks


Istnieje kilka sposobów. Osobiście używam następujących:

wyodrębnianie pojedynczej wartości:

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

pracować z całą odpowiedzią, gdy potrzebujesz więcej niż jednego:

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

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

wyodrębnij jeden przy użyciu JsonPath, aby uzyskać odpowiedni typ:

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

Ostatnia jest naprawdę przydatna, gdy chcesz dopasować do wartości i typu, np.

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

Pozostała pewność dokumentacji jest dość opisowa i pełna. Istnieje wiele sposobów osiągnięcia tego, o co prosisz: https://github.com/jayway/rest-assured/wiki/Usage


13
2017-11-23 11:25





Aby serializować odpowiedź w klasie, zdefiniuj klasę docelową

public class Result {
    public Long user_id;
}

I odpowiedź na mapę:

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

Musisz mieć Jacksona lub Gsona w ścieżce klasowej, jak stwierdza dokumentacja: http://rest-assured.googlecode.com/svn/tags/2.3.1/apidocs/com/jayway/restassured/response/ResponseBodyExtractionOptions.html#as(java.lang.Class)


7
2018-05-12 12:54