grails 3 中的自定义验证器名称

Custom validator name in grails 3

我正在将一个大项目从 grails 2.5.4 迁移到 3.3.10。一切进展顺利,但我的领域对象出现了一个主要问题。我以前用这种方式编写我的自定义验证器:

class Person {
  String name

  static constraints = {
      name: nullable: false, validator: validateName
  }
  static validateName = {
      // validation code
  }
}

Grails 抛出以下异常

 No such property: validatorTest for class: org.grails.orm.hibernate.cfg.HibernateMappingBuilder

在 grails 3.x 中,这种定义验证器的方式似乎已被破坏。我知道文档说要这样使用:

name nullable: false, validator: { // code }

但在那种情况下需要重写很多代码。

有没有办法使用旧方法定义验证器?

谢谢

https://github.com/jeffbrown/alejandroveraconstraints 查看项目。

https://github.com/jeffbrown/alejandroveraconstraints/blob/master/grails-app/domain/alejandroveraconstraints/Person.groovy:

// grails-app/domain/alejandroveraconstraints/Person.groovy
package alejandroveraconstraints

class Person {
    String name

    static constraints = {
        name nullable: false, validator: Person.validateName
    }

    static validateName = {
        it != 'Some Bad Name'
    }
}

https://github.com/jeffbrown/alejandroveraconstraints/blob/6701f61d61dbbde34f4925d1bf418448eee0a729/src/test/groovy/alejandroveraconstraints/PersonSpec.groovy:

// src/test/groovy/alejandroveraconstraints/PersonSpec.groovy
package alejandroveraconstraints

import grails.testing.gorm.DomainUnitTest
import spock.lang.Specification

class PersonSpec extends Specification implements DomainUnitTest<Person> {

    void "test validation"() {
        expect:
        !new Person(name: 'Some Bad Name').validate()
        new Person(name: 'Some Good Name').validate()
    }
}