使用MockMvc的.jsonpath()方法测试API响应体时如何访问方括号[]内的JSON数组内容
编译错误的核心成因
jsonPath()方法的方法签名要求传入非空的合法JSONPath表达式,你直接留空的写法不符合参数要求,会直接触发编译报错,这个问题和响应结构本身的解析逻辑无关。
顶层为用户数组场景的表达式写法
结合你之前使用RestAssured + Hamcrest的测试经验,以下是不同测试需求对应的可直接复用的表达式,规则和你之前熟悉的JSONPath语义完全一致,无需额外调整使用习惯:
- 仅断言响应整体是合法数组结构:使用JSONPath根节点表达式
$,写法为.jsonPath("$", ...) - 断言数组整体长度:搭配根路径下的长度函数,例如校验返回用户列表共5条的写法为
.jsonPath("$.length()", is(5)),这里的is()是你熟悉的Hamcrest匹配器,无需切换断言逻辑 - 按下标匹配特定位置的用户字段:例如校验数组第1个元素的
userId字段值为102,表达式写为$[0].userId,即.jsonPath("$[0].userId", is(102)) - 批量校验数组内所有元素的通用规则:例如断言所有用户的
status字段均为"ACTIVE",表达式写为$[*].status,搭配Hamcrest的everyItem(is("ACTIVE"))即可完成匹配
常见踩坑提醒
- 不要尝试传入空字符串、全空白字符串作为jsonPath表达式,这类参数会直接触发编译错误
- 不要把代表数组结构的方括号裸写为表达式,例如直接传
[],这类写法不属于合法JSONPath语法,即使通过编译也会触发运行时解析异常 - MockMvc下的JSONPath解析规则和RestAssured的规则完全兼容,你之前写过的匹配表达式可以直接迁移使用,不需要重构逻辑
内容的提问来源于stack exchange,提问作者Burakhan Aksoy
相关产品推荐
相关产品推荐

