Grails:将自定义约束应用于域类的所有字段

Posted

技术标签:

【中文标题】Grails:将自定义约束应用于域类的所有字段【英文标题】:Grails: Apply a custom constraint to all fields of an Domain class 【发布时间】:2014-08-23 06:20:08 【问题描述】:

在 Grails 中,可以在 Config.groovy 文件中定义全局约束,该文件可用于验证来自每个域类的所有已定义约束

Config.groovy:
    grails.gorm.default.constraints = 
        '*'(nullable: true)
        ...
    

问题: 是否也可以定义一个仅用于一个域类的字段的约束?我正在考虑这样的事情(实际上行不通)

class myDomainClass
fields
...

static constraints = 
'*'(MyCustomCOnstraint:true)




【问题讨论】:

【参考方案1】:

我不知道是否有标准解决方案。

如果没有,你可以在约束闭包内建立一个循环:

static constraints = 
  // use MyCustomCOnstraint:true for fields firstname, lastname and address
  ['firstname', 'lastname', 'address'].each  property ->
    "$property"(MyCustomCOnstraint:true)
  

【讨论】:

【参考方案2】:

你可以看看一些东西:

    一种向后兼容的技巧 - 我认为从 grails 2.3.4 开始:在您的 config.groovy 中
// Null object error fix for backward compatibility 
grails.databinding.convertEmptyStringsToNull = false

这会停止将空白转换为空值 - 并且可能会解决您的问题,添加此功能是有原因的 - 为了您自己的应用安全...所以请明智地选择。

    您可以查看 Burt Beckwith 的 Grails 编程第 3 章介绍了自定义验证,从安装模板到进行极端自定义验证:

导入 com.myapp.MyUserValidator beans = 'com.myapp.UserValidator'(MyUserValidator)

但老实说,除了讨论设置过滤器以将所有输入空白转换为空值的部分之外,我真的认为该部分没有任何帮助:

convertBlanksToNullsAndTrim

您可以反转该代码,以便如果它为空,则使其=''。再次使用上述点,如果默认情况下它可以设置为空,除非在您的 config.groovy 中设置点 1

如果是我,我会尝试第一个选项,看看它是否能治愈当前的情况

【讨论】:

以上是关于Grails:将自定义约束应用于域类的所有字段的主要内容,如果未能解决你的问题,请参考以下文章

Grails - 从自定义验证器闭包调用内置约束

更新 Grails 中父域类中的“lastUpdated”字段

Grails 迭代域类的所有 id 的最佳方法

来自另一个域类的属性的 Grails 自定义验证器

grails 和 spring security acl:仅显示域类的一些实例

如何将 Grails 域类映射到 DTO?