WireMock 如何编写匹配数组包含指定值的正确JSONPath表达式
WireMock JSONPath数组包含匹配调整方案
问题原因
你当前使用的JSONPath表达式 $.RequestBody[?(@.numbers == ['10010701'])] 的匹配逻辑是校验numbers数组完全等价于仅包含10010701的单元素数组,因此只有数组长度为1且值完全对应时才会生效,无法适配数组包含多个元素的场景。
解决方法
调整matchesJsonPath为以下任意一种写法即可实现需求:
- 写法1:直接查询数组中匹配目标值的节点,只要存在至少1个匹配结果即可触发规则
"matchesJsonPath": "$.RequestBody.numbers[?(@ == '10010701')]"
- 写法2:使用JsonPath的
contains运算符直接判断数组包含目标值
"matchesJsonPath": "$.RequestBody[?(@.numbers contains '10010701')]"
匹配逻辑说明
WireMock的matchesJsonPath规则判定逻辑为:只要指定的JSONPath表达式能在请求Body中查询到至少一个匹配结果,就判定请求匹配成功。上述两种写法只要numbers数组中存在10010701值,无论数组还包含多少其他元素,都会匹配成功。
内容的提问来源于stack exchange,提问作者S.I.D
相关产品推荐
相关产品推荐

