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

使用Hamcrest与jsonPath断言JSON时遇Expected: null but: was <[null]>问题

解决MockMvc jsonPath断言null时出现"Expected: null but: was <[null]>"的问题

我来帮你搞定这个问题!你遇到的报错核心原因在于jsonPath表达式的写法不对,导致返回的结果是一个数组而非单个值。

问题分析

你用的jsonPath("*.errorMessage")表达式里,*是通配符,会匹配JSON中所有层级下的errorMessage字段——哪怕只有一个匹配项,它返回的也是一个数组(也就是你看到的<[null]>)。而你用IsNull.nullValue()断言的是单个null值,自然就不匹配了。

再看你的返回JSON结构:

{ "some_string": { "errorMessage": null } }

这里的errorMessage是明确嵌套在some_string下的,完全可以精准定位,不需要用通配符。

解决方案

把jsonPath表达式改成精准路径即可,用$.some_string.errorMessage来定位到单个errorMessage字段:

mockMvc.perform(post(TEST_ENDPOINT)
        .param("someParam", SOMEPARAM))
        .andDo(print())
        .andExpect(status().is2xxSuccessful())
        .andExpect(jsonPath("$.some_string.errorMessage").value(IsNull.nullValue()));

这样修改后,jsonPath会返回单个的null值,和你期望的IsNull.nullValue()完全匹配,断言就能成功通过了。

如果之后遇到需要匹配多个errorMessage的场景(比如数组中的多个对象),可以用everyItem来断言数组里的每个元素都是null:

.andExpect(jsonPath("*.errorMessage").everyItem(IsNull.nullValue()))

不过你的场景里用第一种精准路径的方案就足够啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:03:29