You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RestAssured JsonPath findAll方法未按预期筛选,求问题排查

问题:RestAssured JsonPath findAll返回所有匹配项而非单个结果

你遇到的问题根源其实是一个很容易犯的语法错误——在Groovy闭包的判断条件里,你用了赋值运算符=,而不是用来做比较的相等运算符==!

为什么会出现这种情况?

在Groovy中,it.title = 'Frau'是一个赋值操作:它会把所有travelerPurchase元素的title字段都设置为'Frau',同时这个表达式的返回值就是被赋予的字符串'Frau'。在布尔判断场景下,非空字符串会被自动转为true,所以findAll会认为所有元素都满足条件,自然就返回了全部匹配项(其实是所有元素都被修改后符合条件了)。

修正方案

首先把条件里的=改成==,然后根据你的需求选择两种方式:

方式1:用find直接获取第一个匹配项(推荐,更高效)

find方法会返回第一个满足条件的元素,而不是集合:

// 获取第一个title为Frau的travelerPurchase对象
System.out.println(restApi.getValueFromJson(filePath,"purchases.purchase.insuredItems.travelers.travelerPurchase.find{it.title == 'Frau'}"));

// 获取该对象的dateOfBirth字段
System.out.println(restApi.getValueFromJson(filePath,"purchases.purchase.insuredItems.travelers.travelerPurchase.find{it.title == 'Frau'}.dateOfBirth"));

方式2:用findAll后取集合第一个元素

如果你确实需要先拿到所有匹配项的集合,再取第一个,也可以在集合后加索引[0]:

// 获取所有匹配的集合,再取第一个元素
System.out.println(restApi.getValueFromJson(filePath,"purchases.purchase.insuredItems.travelers.travelerPurchase.findAll{it.title == 'Frau'}[0]"));

// 取第一个元素的dateOfBirth
System.out.println(restApi.getValueFromJson(filePath,"purchases.purchase.insuredItems.travelers.travelerPurchase.findAll{it.title == 'Frau'}[0].dateOfBirth"));

这样就能得到你预期的单个结果啦!

内容的提问来源于stack exchange,提问作者Luis Urea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:09:26