SoapUI Groovy脚本报PathNotFoundException 如何让缺失字段返回null
问题根因
代码中调用的JsonPath read()方法默认配置下,匹配不到指定JSON路径时会直接抛出PathNotFoundException,不会自动返回null;同时原有脚本未显式声明JsonPath解析配置、也未引入对应依赖,是触发报错的直接原因。
可行解决方案
方案1:修改JsonPath配置,缺失路径时返回null
通过显式配置JsonPath的DEFAULT_PATH_LEAF_TO_NULL参数,即可让路径匹配失败时直接返回null,不再抛出异常,可直接替换原有脚本:
import com.jayway.jsonpath.Configuration import com.jayway.jsonpath.JsonPath import com.jayway.jsonpath.Option // 初始化JsonPath配置:指定路径不存在时返回null def pathConfig = Configuration.builder() .options(Option.DEFAULT_PATH_LEAF_TO_NULL) .build() def response = context.expand( '${moneytransfer#Response}' ) def id = JsonPath.using(pathConfig).parse(response).read('$.success_text') log.info id
方案2:使用Groovy原生解析器,无需额外配置
SoapUI自带Groovy原生的JsonSlurper解析组件,访问不存在的JSON字段时天然返回null,不会抛出路径不存在异常,代码更简洁:
import groovy.json.JsonSlurper def response = context.expand( '${moneytransfer#Response}' ) def parsedResp = new JsonSlurper().parseText(response) def id = parsedResp.success_text log.info id
补充说明:
- 如果
moneytransfer接口返回的是XML格式而非JSON格式,把JsonSlurper替换为XmlSlurper即可,访问不存在节点的逻辑完全一致,不会触发异常- 如果需要读取多层嵌套的JSON字段,建议搭配Groovy安全导航符
?.使用,例如读取$.data.info.success_text时写为parsedResp.data?.info?.success_text,即使上层节点不存在也会直接返回null,不会抛出空指针异常
内容的提问来源于stack exchange,提问作者Moni
相关产品推荐
相关产品推荐

