如果某个键包含Rest Restured / Serenity中的空格,我如何获得该键的值?

时间:2017-07-14 22:27:32

标签: java json rest rest-assured serenity-bdd

我正在尝试在Serenity框架中使用Rest Assured来验证端点响应。我将一个xml主体发送到端点并期望返回JSON响应:

{"Entry ID" : "654123"}

我想发送XML并在JSON响应中验证密钥的值"条目ID"不为空或为空。问题是,密钥中有一个空格,我相信它会导致错误。以下是我到目前为止的情况:

SerenityRest.given().contentType(ContentType.XML)
.body(xmlBody)
.when().accept(ContentType.JSON).post(endpoint)
.then().body("Entry ID", not(isEmptyOrNullString()))
.and().statusCode(200);

这会产生错误:

java.lang.IllegalArgumentException: Invalid JSON expression:
Script1.groovy: 1: unable to resolve class                          Entry 
@ line 1, column 33.
                        Entry ID
                               ^

1 error

我试过包装"条目ID"以不同的方式无效:

.body("'Entry ID'", not(isEmptyOrNullString()))
.body("''Entry ID''", not(isEmptyOrNullString()))
.body("\"Entry ID\"", not(isEmptyOrNullString()))
.body("['Entry ID']", not(isEmptyOrNullString()))
.body("$.['Entry ID']", not(isEmptyOrNullString()))

是否可以在Rest Assured中获取包含空格的键的值?

1 个答案:

答案 0 :(得分:1)

您只需要使用单引号转义密钥:

then().body("'Entry ID'", not(isEmptyOrNullString()))

以下是一个示例(在3.0.6版中测试):

// Given
String json = "{\"Entry ID\" : \"654123\"}";

// When
JsonPath jsonPath = JsonPath.from(json);

// Then
assertThat(jsonPath.getString("'Entry ID'"), not(isEmptyOrNullString()));