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

Spring MVC JUnit测试JSON路径$.externalId无值,该如何调整JsonPath?

问题根因

你打印的MockHttpServletResponse日志中Body = [],说明接口实际返回的是空JSON数组,这才是No value at JSON path "$.externalId"报错的核心原因:当前返回结果里没有任何数据,不管怎么调整JsonPath都找不到对应值,不是JsonPath语法的问题。

其次你还存在两处逻辑错误:

  1. Mock的服务方法与实际Controller调用不匹配:你测试中Mock的是carportService.getCarportLocationToId(),但请求实际命中的Controller方法是CarportController#_getCarportLocationsByIdAndName(String),如果该方法内部调用的Service方法、入参与你Mock的逻辑不一致,Mock返回不会生效,Service层自然返回空结果。
  2. JsonPath取值代码有误:你写的.value(CarportLocation.getExternalId())是直接调用类的静态方法,应该传入你构造的实例对象的属性:.value(carportLocation.getExternalId())。

修复步骤

  • 先确认_getCarportLocationsByIdAndName方法内部的Service调用逻辑,保证Mock的方法名、入参和实际调用完全对齐,让接口返回你构造的carportLocation数据。
  • 确认接口的返回结构:如果接口设计是返回单个CarportLocation对象,排查为什么被包装成空数组返回;如果接口本身返回的是CarportLocation数组,哪怕只有一条数据也会包裹在数组中,等Mock生效返回数据后,将JsonPath调整为$[0].externalId即可(数组下标从0开始,你之前写的$[1]是取第二个元素,本身也不对)。
  • 修正.value()中的取值逻辑,替换为实例对象的属性取值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:06:01