Grails 空白约束和空约束之间的差异

Grails 空白约束和空约束之间的差异,grails,gorm,Grails,Gorm,我有以下课程 class Task { String title String notes TekUser assignedTo Date dueDate TekEvent event static constraints = { title blank:false notes blank: true , maxSize: 5000 assignedTo nullable:true

我有以下课程

class Task {

    String title
    String notes
    TekUser assignedTo
    Date dueDate
    TekEvent event

    static constraints = {
        title blank:false
        notes blank: true , maxSize: 5000
        assignedTo nullable:true
        dueDate nullable:true
    }

    static belongsTo = TekEvent
}
即使我指定了
notes blank:true

空白:真有什么作用?

  • blank:true
    表示字段接受空字符串或仅由空格组成的字符串作为有效值。例如:
  • nullable:true
    表示字段接受
    null
    作为有效值
它们可以一起使用。例如:

title blank:false, nullable: true

虽然aruizca的答案是正确的和描述性的,但我在阅读Burt Beckwith的书时发现了这一点:“编程Grails

空白与空白的对比 在许多情况下,空字符串和null是无效的 没有设置任何值。但是来自web的HTTP提交 浏览器POST请求为没有值的输入发送空白字符串。 对于非HTTP数据(例如来自其他服务器的数据),情况并非如此 外部客户机喜欢web服务或在测试期间,因此 HTTP层的空到空将有助于简化验证。虽然 我们已经做到了,我们还可以从提交的文件中删除额外的空白 价值观


这可能与你的问题无关。Aruizca的答案是您所需要的全部,但这可以是关于空格和空的附加信息。

其他答案都是正确的,但为了解决您的问题:

创建的mysql表将notes设置为NOTNULL,即使我 指定的注释为空:true

空白:真有什么作用


blank:false
防止在该字段上设置空值(例如“,”等)。这与mysql上约束为
notnull
的字段无关。这是因为Grails约束在每个字段上都默认为
nullable:false
,除非您显式地将其设置为
nullable:true

,但我仍然无法理解为什么表中的列
notes
设置为
not null
?默认情况下Grails不允许属性为null值(例如:可为空:false)。如果需要空值,则需要显式表示它->可空:true因此,notes列可能需要的约束为:可空:true,blank:true,maxSize:500如果未给定约束,则具有约束的字段是否接受空字符串
可空:false
如果未给定约束,则默认行为为s由于数据绑定器会将空白字符串转换为null,因此空白字符串不会验证为
nullable:false
。这有助于我查明引导生成的测试数据的问题:map构造函数将空字符串转换为null,因此我必须在构造函数调用后设置属性以满足nullable:false,blank:true v验证,谢谢!