Constraints 用法
Constraints约束通过定义DSL(领域专用语言)来生成校验规则、架构生成和CRUD生成元数据. 例如:
import grails.persistence.Entity;
import org.grails.datastore.gorm.GormEntity
@Entity
class User implements GormEntity<User>{
...
static constraints = {
login size: 5..15, blank: false, unique: true
password size: 5..15, blank: false
email email: true, blank: false
age min: 18
}
}
参看 Constraints 了解更多校验规则.
Global Constraints全局约束
可以在 `src/main/resources/application.groovy`中定义全局约束:
grails.gorm.default.constraints = {
'*'(nullable: true, size: 1..20)
}
其中的*通配符会应用在所有的属性上.也可以定义全局共享约束:
grails.gorm.default.constraints = {
myShared(nullable: true, size: 1..20)
}
这样就可以向下面代码一样在domain类中重用:
import grails.persistence.Entity;
import org.grails.datastore.gorm.GormEntity
@Entity
class User implements GormEntity<User>{
...
static constraints = {
login(shared: "myShared")
}
}
Quick Reference 快速参考
Constraint约束 | Description描述 | Example示例 |
---|---|---|
blank |
验证字符串值不是空 |
|
creditCard |
验证字符串值是有效的信用卡号 |
|
验证字符串值是有效的邮件地址 |
|
|
inList |
验证值是否在约束值的范围或集合中 |
|
matches |
验证字符串值是否与给定的正则表达式匹配 |
|
max |
验证值不超过给定的最大值 |
|
maxSize |
验证集合的大小不超过给定的最大值 |
|
min |
验证值不低于给定的最小值 |
|
minSize |
验证集合的大小不低于给定的最小值 |
|
notEqual |
验证属性不等于指定值 |
|
nullable |
允许属性设置为“null”-默认为“false” |
|
range |
使用Groovy的Range类型以确保属性值在指定范围内 |
|
scale |
设置为浮点数字所需的尺度(即小数点右边的位数) |
|
size |
使用GroovyRange类型限制集合或数字的大小或字符串的长度 |
|
unique |
在数据库级别将属性限制为唯一 |
|
url |
验证字符串值是有效URL |
|
validator |
向字段添加自定义验证 |
See documentation |
编程访问
可以在代码中通过静态方法 GbSpringUtils.getDomainConstraintsMap(Class domainclass)
. 返回类型为 Map<String, http://docs.grails.org/3.2.8/api/grails/validation/ConstrainedProperty.html[ConstrainedProperty]>
.
import grails.persistence.Entity;
import org.grails.datastore.gorm.GormEntity
@Entity
class User implements GormEntity<User>{
String firstName
String middleName
static constraints = {
firstName blank: false, nullable: false
middleName blank: true, nullable: true
}
}
上面的例子中, GbSpringUtils.getDomainConstraintsMap(User).firstName.blank
返回值为 false
, 而`GbSpringUtils.getDomainConstraintsMap(User).middleName.blank` 返回值为 true
.
Command Objects 命令对象
command object是一种只验证约束关系、不生成数据库表映射的对象
可以通过命令对象的静态属性 constraintsMap`直接访问约束.返回类型为 `Map<String, http://docs.grails.org/3.2.8/api/grails/validation/ConstrainedProperty.html[ConstrainedProperty]>
class User implements Validateable {
String firstName
String middleName
static constraints = {
firstName blank: false, nullable: false
middleName blank: true, nullable: true
}
}
上面的例子中, User.constraintsMap.firstName.blank
返回值为 false
,而 User.constraintsMap.middleName.blank
返回值为 true
.