放心.是否有可能从请求json中提取值?

Jay*_*Jay 46 java rest json rest-assured

我这样得到回应:

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

我在responseBody中有一个json:

{"user_id":39}
Run Code Online (Sandbox Code Playgroud)

我可以使用rest-assured的方法提取到字符串只有这个值= 39?

Joh*_*han 45

如果您只对提取"user_id"感兴趣,也可以这样做:

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

最简单的形式看起来像这样:

String userId = get("/person").path("person.userId");
Run Code Online (Sandbox Code Playgroud)


mag*_*ter 20

有几种方法.我个人使用以下的:

提取单个值:

String user_Id =
given().
when().
then().
extract().
        path("user_id");
Run Code Online (Sandbox Code Playgroud)

当您需要多个响应时,可以使用整个响应:

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

String userId = response.path("user_id");
Run Code Online (Sandbox Code Playgroud)

使用JsonPath提取一个以获得正确的类型:

long userId =
given().
when().
then().
extract().
        jsonPath().getLong("user_id");
Run Code Online (Sandbox Code Playgroud)

当你想要匹配值和类型时,最后一个非常有用

assertThat(
    when().
    then().
    extract().
            jsonPath().getLong("user_id"), equalTo(USER_ID)
);
Run Code Online (Sandbox Code Playgroud)

有保证的文档非常具有描述性和完整性.有很多方法可以实现您的要求:https://github.com/jayway/rest-assured/wiki/Usage


Jay*_*Jay 19

我找到了答案:)

使用JsonPathXmlPath(如果您有XML)从响应正文中获取数据.

就我而言:

JsonPath jsonPath = new JsonPath(responseBody);
int user_id = jsonPath.getInt("user_id");
Run Code Online (Sandbox Code Playgroud)

  • 这只是简单的香草JSON访问.什么JSON工具包会做什么. (3认同)

Mil*_*nka 9

要将响应序列化到类中,请定义目标类

public class Result {
    public Long user_id;
}
Run Code Online (Sandbox Code Playgroud)

并映射对它的响应:

Response response = given().body(requestBody).when().post("/admin");
Result result = response.as(Result.class);
Run Code Online (Sandbox Code Playgroud)

您必须在类路径中包含Jackson或Gson,如文档所述:http://rest-assured.googlecode.com/svn/tags/2.3.1/apidocs/com/jayway/restassured/response/ResponseBodyExtractionOptions.html#as( java.lang.Class中)