我正在尝试将Grails 2.3.7项目升级到Grails 3.2.3。在2.3.7中,我使用了自定义约束,并使用以下命令在/conf/Config.groovy中注册它们:
org.codehaus.groovy.grails.validation.ConstrainedProperty.registerNewConstraint('description', my.validation.DescriptionConstraint)
然后,我可以在域中使用类似的内容:
static constraints = {
approvedDate(description: '>= applyDate')
}
但是,在Grails 3.2.3中,当我在/conf/application.groovy中放置上述命令(并从包名称中删除org.codehaus.groovy)时,出现以下错误:
Error occurred running Grails CLI: No signature of method: groovy.util.ConfigObject.registerNewConstraint() is applicable for argument types: (groovy.util.ConfigObject, groovy.util.ConfigObject) values: [[:], [DESCRIPTION_CONSTRAINT:[:]]]
我注意到Grails 3中的验证类有所更改。但是,使用Grails-validation的约束类仍然会出现相同的错误。
我发现的所有验证插件都早在Grails 3之前就被放弃了。而且在Grails 3.2中找不到用于注册新约束的文档。
最佳答案
在/grails-app/init/BootStrap.groovy中调用ConstrainedProperty.registerNewConstraint
是可行的。 (在Grails 3.2.4中进行了测试)
class BootStrap {
def init = { servletContext ->
grails.validation.ConstrainedProperty.registerNewConstraint('description', my.validation.DescriptionConstraint)
// The rest of bootstrap code
}
}
注意。以前,我从/grails-app/init/Application.groovy中的
main()
调用它。它适用于运行应用程序。但是,它不适用于集成测试。
关于grails - 注册自定义约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41071987/