【问题标题】:SerenityRest Filter Response BodySerenityRest 过滤器响应体
【发布时间】:2019-05-24 21:20:25
【问题描述】:

我正在尝试返回值“欢迎!”其中对象包含等于“主题”的“名称”键。响应正文数据如下:

"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>"
        }

下面的 sn-p 将返回第一个遇到的“value”:“1.0”,但我需要获取 name =“Subject”的值。如何过滤结果并检查匹配的字符串?

Response response = SerenityRest.rest()
   .contentType("application/json")
   .get("URL")
response.then().statusCode(200);
String subject = response.jsonPath().getString("payload.headers.value");

“欢迎”的值不是静态的,而是“名称”:“主题”永远不会改变。

【问题讨论】:

    标签: java rest response


    【解决方案1】:

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

    "payload.headers[?(@.name=='Subject')].value"
    

    但是我看一下json-path rest-assured,它是 Serenity rest 用来执行 json-path 操作的库,该库不使用标准的 json-path 合成器,而是基于 groovy lambda 的合成器来执行高级搜索。所以这应该有效:

    "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!"
    

    这个博客帮助我了解合成器的变化: What's new in REST Assured 1.8?

    【讨论】:

    • 这正是我所需要的。谢谢!
    猜你喜欢
    • 2019-10-16
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 2014-02-10
    • 1970-01-01
    • 2020-09-02
    相关资源
    最近更新 更多