使用RestAssured Java提取MailTM API的hydra:member属性报错
解决MailTM API中JsonPath提取
hydra:member字段失败的问题 问题场景
提取MailTM的GET /domains API响应里的hydra:member字段时出现解析错误,API响应结构如下:
{ "@context": "/contexts/Domain", "@id": "/domains", "@type": "hydra:Collection", "hydra:member": [ { "@id": "/domains/63d9a7067f7658e92f217bdd", "@type": "Domain", "id": "63d9a7067f7658e92f217bdd", "domain": "eurokool.com", "isActive": true, "isPrivate": false, "createdAt": "2023-02-01T00:00:00+00:00", "updatedAt": "2023-02-01T00:00:00+00:00" } ], "hydra:totalItems": 1 }
使用RestAssured的JsonPath提取字段时,@context、@type等字段能正常获取,但提取hydra:member时抛出java.lang.IllegalArgumentException: Invalid JSON expression: Script1.groovy: 1: unexpected token: : @ line 1, column 10.错误。
原代码如下:
RestAssured.baseURI = "https://api.mail.tm"; Response response = given() .when() .get("/domains") .then() .extract().response(); response.body().jsonPath().get("hydra:member");
解决方案
问题根源是JsonPath会把字段名里的冒号识别为命名空间分隔符,导致解析逻辑混乱。只需将包含特殊字符的字段名用单引号或双引号包裹,让JsonPath将其当作普通字符串处理即可。
修改后的代码:
// 单引号包裹字段名 response.body().jsonPath().get("'hydra:member'"); // 或双引号包裹(注意Java里需要转义) response.body().jsonPath().get("\"hydra:member\"");
调整后就能正确提取hydra:member对应的数组内容。
内容的提问来源于stack exchange,提问作者Oreliya Fernando
相关产品推荐
相关产品推荐

