Java 如果密钥包含Rest-Assured/Serenity中的空格,如何获取密钥的值?
我试图在Serenity框架中使用Rest Assured来验证端点响应。我向端点发送了一个xml正文,并希望返回JSON响应,如下所示:Java 如果密钥包含Rest-Assured/Serenity中的空格,如何获取密钥的值?,java,json,rest,rest-assured,serenity-bdd,Java,Json,Rest,Rest Assured,Serenity Bdd,我试图在Serenity框架中使用Rest Assured来验证端点响应。我向端点发送了一个xml正文,并希望返回JSON响应,如下所示: {"Entry ID" : "654123"} 我想发送XML并在JSON响应中验证键“Entry ID”的值不是空的或null的。问题是,密钥中有一个空格,我相信这会导致错误。以下是我到目前为止的情况: SerenityRest.given().contentType(ContentType.XML) .body(xmlBody) .when().acc
{"Entry ID" : "654123"}
我想发送XML并在JSON响应中验证键“Entry ID”的值不是空的或null的。问题是,密钥中有一个空格,我相信这会导致错误。以下是我到目前为止的情况:
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中空格的键的值?您只需使用单引号转义键:
then().body("'Entry ID'", not(isEmptyOrNullString()))
下面是一个示例(在版本3.0.6中测试):
切换到空手道[]它没有这个问题,这里有一个例子:我的想法是,一定是其他东西出了问题。不过,body(“['Entry ID']”)是正确的方法。它使用的是重新发行的jaywayjson路径。也许试着用path来抓取它,然后再验证它?
// Given
String json = "{\"Entry ID\" : \"654123\"}";
// When
JsonPath jsonPath = JsonPath.from(json);
// Then
assertThat(jsonPath.getString("'Entry ID'"), not(isEmptyOrNullString()));