Groovy中如何校验字段位置动态变化的API响应,实现仅更新Excel完成数据比对
非固定位置字段的API配置化比对方案
实现核心
- 解决字段位置不固定的核心:对API返回的JSON做全层级扁平化遍历,不硬编码字段路径,把所有嵌套的键值对展平成可检索的键值集合,从根源上绕开“字段位置变化导致固定定位器失效”的问题
- 做到改配置不动代码的核心:Excel作为唯一的规则载体,所有校验逻辑、基准值全部外置到Excel表中,代码仅内置通用的遍历、匹配、比对能力,不写死任何具体的字段名、校验规则
- 解决重复字段的核心:遍历展平时,自动给数组节点加层级序号索引,同时匹配时支持按字段名模糊检索,不管同名重复字段出现在哪个层级、哪个数组索引下,都能被批量检索到做校验
Excel配置表结构设计
所有调整不需要改代码,只要在Excel表内更新对应行即可:
- 字段匹配规则列:填写需要校验的目标字段名,支持模糊匹配,比如填写
offerId就自动检索全JSON中所有同名的字段值,不需要填写完整的层级路径 - 基准值列:填写对应字段的预期值,多值场景支持批量填写
- 校验类型列:选择提前内置的校验规则,可选值包括完全匹配、非空校验、包含校验、集合值比对等
- 异常提示列:填写校验不通过时输出的提示内容
示例响应处理演示
针对给出的API响应,经过扁平化处理后会生成如下可检索的键值集合:
mobilePlans[0].offerId = 67d33e0e-4225-426b-ad56-68e39be577e4 mobilePlans[0].product.promotionReferences[0].promoId = 2074e0c0-08b6-49ea-8ea9-9390651ab676 mobilePlans[0].product.source = cpopC1 mobilePlans[0].product.lobType = wireless mobilePlans[1].offerId = ff1f96e8-704e-4d97-92c6-35008ec1c0ac mobilePlans[1].product.promotionReferences[0].promoId = 2074e0c0-08b6-49ea-8ea9-9390651ab676 mobilePlans[1].product.source = cpopC1 mobilePlans[1].product.lobType = wireless
哪怕后续接口返回时,把lobType和source字段在product对象里的位置调换,或者把数组内两个套餐的顺序交换,只要字段名保持不变,配置好的校验规则依然可以正常生效,完全不需要调整代码逻辑。
内容的提问来源于stack exchange,提问作者Johnny
相关产品推荐
相关产品推荐

