web-dev-qa-db-ja.com

安心してください。リクエストJSONから値を抽出することは可能ですか?

私はこの方法で応答を得ています:

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

ResponseBodyにjsonがあります。

{"user_id":39}

この値= 39のみ、rest-assuredのメソッドを使用して文字列に抽出できますか?

43
Jay

私は答えを見つけました:)

JsonPath または XmlPath (XMLがある場合)を使用して、応答本文からデータを取得します。

私の場合:

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

「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");
44
Johan

いくつかの方法があります。私は個人的に次のものを使用します:

単一の値を抽出する:

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

複数が必要な場合は、応答全体を処理します。

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

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

jsonPathを使用して1つを抽出し、適切なタイプを取得します。

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

最後の値は、値とタイプに対して照合する場合に非常に便利です。

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

安心感のあるドキュメントは非常に説明的で完全です。あなたが求めていることを達成する多くの方法があります: https://github.com/jayway/rest-assured/wiki/Usage

20
magiccrafter

応答をクラスにシリアル化するには、ターゲットクラスを定義します

public class Result {
    public Long user_id;
}

そして、それに応答をマップします。

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

ドキュメントが示すように、クラスパスにジャクソンまたはGsonが必要です: http://rest-assured.googlecode.com/svn/tags/2.3.1/apidocs/com/jayway/restassured/response/ResponseBodyExtractionOptions。 html#as(Java.lang.Class)

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