无法检查grails中的空数据

Unable to check empty data in grails

我有这样的数据,

def data = [[name : '', users : []]]

我尝试通过各种方式检查数据是否为空,但它不再起作用了。 例如,

if(data.name == null){
   println 'empty'
}else{
   println 'not empty'
}

或者

if(data.name == ''){
   println 'empty'
}else{
   println 'not empty'
}

总是打印 'not empty'。 如何检查是否为空?

data 是一个列表,data.name 意味着 data*.name (Spread Operator)。如此清楚地检查 null'' 不会对列表起作用。

所以您的支票应该是 data.name==[null] 或类似的东西。例如

groovy:000> data = [[name : '', users : []]]
===> [[name:, users:[]]]
groovy:000> data.name
===> []
groovy:000> data.name==['']
===> true

要利用 Groovy Truth(其中空字符串和 null 都是 "falsey"),您可以检查是否所有名称都设置为:

if (data.name.every()) print "got all names"

如果你只是在那里得到列表,但不需要它,关于 Groovy Truth 的相同规则适用并且以下检查就足够了:

 if (data.first().name) print "got name"

如果你检查 data.name.class 它会给你 class java.util.ArrayList 这意味着您应该使用 data[0].name 访问 name 键。 所以如果你这样做:

if(data[0].name == ''){
   println 'empty'
}else{
   println 'not empty'
}

它将打印 empty

正如他们所说 data.name 是一个 List。所以没有意义,也不可能将列表与空字符串或 null 进行比较。因为 data.name 的可能值是 空列表 字符串列表

所以基本上要实现您需要的功能,您可能需要遍历从 data.name 返回的每个项目,如下所示:

def data = [[name : '', users : []]]

data*.name.every(){
    if(it == '' || it == null)
        println "Name is empty."

     else
         println "Name is not empty."

}