【问题标题】:Custom validator name in grails 3grails 3中的自定义验证器名称
【发布时间】:2019-06-10 23:16:50
【问题描述】:

我正在将一个大项目从 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 }

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

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

谢谢

【问题讨论】:

    标签: unit-testing grails grails3 grails-3.3


    【解决方案1】:

    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()
        }
    }
    

    【讨论】:

    • 效果很好!这很简单。我很惊讶这在 grails 3 中是必需的。事实上,Intellij 说我要删除静态引用,但它不能完成。再次感谢。并感谢示例项目
    • “我很惊讶这在 grails 3 中是必需的。” - 在闭包中引用非限定变量通常是有问题的,因为您不知道闭包的resolveStrategy 在执行时将是什么。即使允许validateNamePerson.validateName 也会更明智。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 2012-09-23
    • 1970-01-01
    • 2016-02-10
    相关资源
    最近更新 更多