如何让JsonUnit的assertJsonEquals在比较时忽略指定字段?
如何在JsonUnit的assertJsonEquals中忽略指定字段
嘿,很高兴能帮你搞定这个问题!你已经在用JsonUnit忽略数组顺序了,要再加个忽略特定字段的逻辑其实超简单,JsonUnit本身就提供了直接的API来实现这个需求。
方法一:在已有配置上追加忽略规则
你可以直接在现有的when(IGNORING_ARRAY_ORDER)后面链式调用and(ignoringPaths(...)),把要忽略的字段路径传进去。针对你的场景,要忽略lastUpdatedTimestamp字段的话,修改后的代码如下:
assertJsonEquals( resource("ExpectedResponse.json"), ActualResponse, when(IGNORING_ARRAY_ORDER) .and(ignoringPaths("lastUpdatedTimestamp")) );
如果需要忽略多个字段,只要给ignoringPaths传多个参数就行,比如:
.and(ignoringPaths("lastUpdatedTimestamp", "anotherFieldToIgnore"))
方法二:用configuration组合校验规则
另一种更直观的写法是用configuration()方法来整合多个校验规则,代码看起来更清晰:
assertJsonEquals( resource("ExpectedResponse.json"), ActualResponse, configuration() .withArrayOrderIgnored() .withIgnoredPaths("lastUpdatedTimestamp") );
关于字段路径的小提示
如果要忽略的是嵌套字段,比如JSON结构是{"metadata": {"updateTime": "..."}},那对应的路径就是"metadata.updateTime",用点号来标识层级嵌套的字段就好。
这两种方式都能完美满足你的需求,选你觉得更易读的写法就ok啦!
内容的提问来源于stack exchange,提问作者Saffik
相关产品推荐
相关产品推荐

