有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java SerenityTest筛选器响应体

我试图返回值“欢迎!”其中,对象包含与“主题”相等的“名称”键。响应机构数据如下:

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

下面的代码段将返回第一个遇到的“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");

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


共 (1) 个答案

  1. # 1 楼答案

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

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

    但我来看看json-path rest-assured,它是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!"
    

    这个博客帮助我理解synthax的变化: What's new in REST Assured 1.8?