Как зарегистрировать собственный класс валидатора в Grails 3

Я хочу реализовать собственный класс валидатора. В Интернете есть несколько руководств, например. http://blog.swwomm.com/2011/02/custom-grails-constraints.html В этих руководствах описано, что вы должны зарегистрировать класс валидатора в файле Config.groovy.

Проблема в том, что Config.groovy заменен на application.groovy в Grails 3. Мой application.groovy выглядит так:

import at.byte_code.businessSuite.core.NamespaceValidatorConstraint
import grails.validation.ConstrainedProperty

ConstrainedProperty.removeConstraint(ConstrainedProperty.VALIDATOR_CONSTRAINT)
ConstrainedProperty.registerNewConstraint(ConstrainedProperty.VALIDATOR_CONSTRAINT, NamespaceValidatorConstraint.class)

Но когда я пытаюсь запустить приложение, я получаю следующую ошибку:

| Error Error occurred running Grails CLI: startup failed:
script1481056327870569414787.groovy: 1: unable to resolve class at.byte_code.businessSuite.core.NamespaceValidatorConstraint
 @ line 1, column 1.
   import at.byte_code.businessSuite.core.NamespaceValidatorConstraint
   ^

script1481056327870569414787.groovy: 2: unable to resolve class grails.validation.ConstrainedProperty
 @ line 2, column 1.
   import grails.validation.ConstrainedProperty
   ^

Как я могу зарегистрировать свой собственный класс валидатора?


person Andreas    schedule 06.12.2016    source источник


Ответы (2)


Это связано с тем, что в Grails 3 запрещено импортировать сторонние классы в application.groovy. Чтобы использовать сторонние классы, создайте файл runtime.groovy.

person Mikhail    schedule 31.10.2017
comment
Можете ли вы дать ссылку на какую-либо документацию, где описано это ограничение? - person Andreas; 13.11.2017
comment
docs.grails.org/3.2.7/guide/upgrading.html - параграф GORM 6 Модель конфигурации - person Mikhail; 11.12.2017

Одним из решений (возможно, есть и другие) было добавить этот код в сам класс Application:

class Application extends GrailsAutoConfiguration {

    static void main(String[] args) {
        GrailsApp.run(Application, args)
    }

    void doWithApplicationContext() {
        ConstrainedProperty.removeConstraint(ConstrainedProperty.VALIDATOR_CONSTRAINT)
        ConstrainedProperty.registerNewConstraint(ConstrainedProperty.VALIDATOR_CONSTRAINT, NamespaceValidatorConstraint.class)
    }
}
person Andreas    schedule 06.12.2016