grails 域 class 约束中的空白和可为空有什么区别?

What the difference between the blank and nullable in the grails domain class constraints?

刚刚看到这个关于 grails 约束的例子,但为什么不把约束留空,我认为 nullableblank 将具有相同的功能。


class User {
    String firstName
    String lastName
    String passwordHash

    static constraints = {
        firstName blank: false, nullable: false
        lastName blank: false, nullable: false
        passwordHash blank: false, nullable: false
    }
}

默认情况下,所有域 class 属性都不可为空(即它们具有隐式 nullable: false 约束)。

约束条件:

  • blank - 验证字符串值不为空。如果字符串值不能为空,则设置为 false

如果字符串是 null,则不会使用 blank: true 进行验证。在这种情况下,将 nullable 约束设置为 true.

  • nullable - 允许将 属性 设置为 null。默认情况下,Grails 不允许 null 属性值。 - 默认 false。 如果 属性 允许空值,则设置为 true。

But why not just leave blank as constraint, i think both nullable and blank will have same function

对于没有值的输入字段,表单提交产生的​​ Web 请求将具有 空字符串,而不是空字符串 。在对不可为 null 的属性进行大量 属性 绑定时,请记住这一点。默认行为是空字符串不会验证 nullable: false,因为数据绑定器会将 blank 字符串转换为 null。这包括空字符串和空白字符串。

空字符串是 trim() 方法 returns 为空字符串的任何字符串。要关闭空字符串到 null 的转换,请在 application.groovy.

中将 grails.databinding.convertEmptyStringsToNull 属性 设置为 false

详情请参考documentation

希望对您有所帮助。