在验证器约束中使用其他约束并非易事。约束闭包的代表是一个ConstrainedPropertyBuilder,您可以阅读它以了解其复杂性。
但这并不重要,因为EmailConstraint使用 Apache 的EmailValidator,您可以在验证器中使用它。这是正在运行的 EmailValidator:
@Grab('commons-validator:commons-validator:1.4.1')
import org.apache.commons.validator.routines.EmailValidator
def emailValidator = EmailValidator.getInstance();
assert emailValidator.isValid('what.a.shame@us.elections.gov')
assert !emailValidator.isValid('an_invalid_emai_address')
您可以在自己的验证器中使用 EmailValidator,如下所示:
import org.apache.commons.validator.routines.EmailValidator
class MyCommand {
String name
String data
static constraints = {
name blank: false, size: 3..64
data validator: {
if(it) {
EmailValidator
.getInstance()
.isValid(it)
} else { true }
}
}
}