findall闭包中的方法参数为空

时间:2015-10-05 06:55:23

标签: groovy

代码中有一个方法

def createdOrders = getValuesByStatus(extractedResponse, status)

其中extractedResponse是jsonSlurper解析结果而status只是字符串值

方法:

def getValuesByStatus(def jsonData, String status ) {
        jsonData.findAll() { json->
            json.responseStatus.status == status
        }
    }

使用Spock进行测试getValuesByStatus完美无缺, 但以某种方式运行主应用程序会导致

java.lang.NullPointerException: Cannot get property 'responseStatus' on null object

在intellij idea中运行debug我可以看到jsonData不是null而不是空,但findall闭包中的断点显示json元素为空...

2 个答案:

答案 0 :(得分:1)

只需使用null safe运算符:

def getValuesByStatus(def jsonData, String status ) {
    jsonData.findAll { json->
        json?.responseStatus?.status == status
    }
}

答案 1 :(得分:0)

jsonData包含空值,但在调试模式下你看不到它们,所以findall闭包中的空值检查有帮助。