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验证,谢谢!