バリデータ制約内で他の制約を使用することは自明ではありません。制約クロージャーのデリゲートは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 }
}
}
}