Java SerentityRest过滤器响应体

Java SerentityRest过滤器响应体,java,rest,response,Java,Rest,Response,我试图返回值“Welcome!”,其中对象包含等于“Subject”的“name”键。响应主体数据如下所示: "payload": { "mimeType": "multipart/alternative", "headers": [ { "name": "Mime-Version", "value": "1.0" }, { "name": "Subject",

我试图返回值“Welcome!”,其中对象包含等于“Subject”的“name”键。响应主体数据如下所示:

"payload": {
    "mimeType": "multipart/alternative",
    "headers": [
       {
            "name": "Mime-Version",
            "value": "1.0"
        },
        {
            "name": "Subject",
            "value": "Welcome!"
        },
        {
            "name": "To",
            "value": "Jane Doe <xyz@xyz.com>"
        },
        {
            "name": "Message-ID",
            "value": "<123456.abc.com>"
        }

值“Welcome”不是静态的,而是“name”:“Subject”永远不会更改。

我不确定是否理解您的问题,如果您正在寻找一个jsonpath筛选器来获取与字段
“name”:“Subject”
关联的值,这应该正常工作:

"payload.headers[?(@.name=='Subject')].value"
但我来看看Serenity rest使用哪个库来执行json路径操作,该库不使用标准json路径Syntax,而是使用基于groovy lambda的Syntax来执行高级搜索。因此,这应该是可行的:

"headers.find{ it.name == 'Subject' }.value"
我用一个完整的例子进行测试:

JsonPath.from("{\"payload\": {\n" +
                "    \"mimeType\": \"multipart/alternative\",\n" +
                "    \"headers\": [\n" +
                "       {\n" +
                "            \"name\": \"Mime-Version\",\n" +
                "            \"value\": \"1.0\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"name\": \"Subject\",\n" +
                "            \"value\": \"Welcome!\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"name\": \"To\",\n" +
                "            \"value\": \"Jane Doe <xyz@xyz.com>\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"name\": \"Message-ID\",\n" +
                "            \"value\": \"<123456.abc.com>\"\n" +
                "        }\n" +
                "    ]\n" +
                "}}")
    .getString("headers.find{ it.name == 'Subject' }.value");
// returns "Welcome!"
JsonPath.from(“{\”有效负载\“:{\n”+
“\”mimeType\“:\”多部分/可选\“,\n”+
“\”标题\“:[\n”+
“{\n”+
“\”名称\“:\”Mime版本\“,\n”+
“\”值\“:\”1.0\“\n”+
},\n+
“{\n”+
“名称”:“主题”,\n+
“\”值\“:\”欢迎!\“\n”+
},\n+
“{\n”+
“\”名称\“:\”至\“,\n”+
“\”值\“:\”简·多伊\“\n”+
},\n+
“{\n”+
“\”名称\“:\”消息ID\“,\n”+
“\”值\“:\”\“\n”+
“}\n”+
“]\n”+
"}}")
.getString(“headers.find{it.name=='Subject'}.value”);
//返回“欢迎!”

这个博客帮助我理解Syntax的变化:

这正是我所需要的。非常感谢。
JsonPath.from("{\"payload\": {\n" +
                "    \"mimeType\": \"multipart/alternative\",\n" +
                "    \"headers\": [\n" +
                "       {\n" +
                "            \"name\": \"Mime-Version\",\n" +
                "            \"value\": \"1.0\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"name\": \"Subject\",\n" +
                "            \"value\": \"Welcome!\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"name\": \"To\",\n" +
                "            \"value\": \"Jane Doe <xyz@xyz.com>\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"name\": \"Message-ID\",\n" +
                "            \"value\": \"<123456.abc.com>\"\n" +
                "        }\n" +
                "    ]\n" +
                "}}")
    .getString("headers.find{ it.name == 'Subject' }.value");
// returns "Welcome!"