如何用Wiremock检测请求体JSON数组是否存在元素缺失指定属性
Wiremock JSON匹配:检测数组中至少一个元素缺失指定属性
需求说明
需要配置Wiremock请求匹配器,当请求体的array1数组中至少存在一个元素缺失prop1属性时触发匹配(prop1可以是任意值甚至null,只要元素没有这个属性就算)。
问题分析
你之前使用的表达式 "expression" : "$.array1[?(@.prop1)]", "absent: true" 仅在**所有数组元素都缺失prop1**时生效,原因是:
$.array1[?(@.prop1)]会返回array1中所有包含prop1的元素- 只有当这个结果为空数组(即所有元素都没有
prop1)时,absent: true才会触发匹配,不符合「至少一个缺失」的需求。
正确的匹配配置
使用JSONPath表达式定位缺失prop1的元素,再通过Wiremock的matchesJsonPath验证该结果非空即可:
{ "request": { "method": "POST", "url": "/your-target-endpoint", "bodyPatterns": [ { "matchesJsonPath": { "expression": "$.array1[?(!@.prop1)]", "matches": ".*" } } ] }, "response": { "status": 400, "body": "请求参数错误:array1中至少有一个元素缺失prop1属性", "headers": { "Content-Type": "application/json" } } }
配置解释
$.array1[?(!@.prop1)]:JSONPath表达式,筛选array1中所有不包含prop1属性的元素"matches": ".*":正则匹配,只要表达式返回的结果非空(即存在缺失prop1的元素),就满足匹配条件
验证场景
- ✅ 当
array1中有1个或多个元素缺失prop1:匹配成功 - ❌ 当
array1中所有元素都包含prop1(无论值是字符串、null还是其他):匹配失败
内容的提问来源于stack exchange,提问作者Alexey Gavrilik
相关产品推荐
相关产品推荐

