1

私は次のようなことをしたい:

class MyCommand {
     String name
     String data

     static constraints = {
         name blank: false, size: 3..64
         data (blank: true) || (blank: false, size: 3..64)
     }
}

ここで、データは空白か、空白でない場合はサイズ制約などの検証に従います。カスタム検証なしでこれを行うことは可能ですか?

4

1 に答える 1

4

バリデータ制約内で他の制約を使用することは自明ではありません。制約クロージャーのデリゲートは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 }
         }
     }
}
于 2015-08-19T22:50:50.460 に答える