【问题标题】:How can we create our own custom validation我们如何创建自己的自定义验证
【发布时间】:2014-11-03 18:55:57
【问题描述】:

我正在使用带有 SDN 的数据库 Neo4j 的 grails 2.4.3,我们不使用 Grails 插件,因此 grails 不支持 Neo4j,如果我们在域包中创建域类,那么它会给我们一个错误。 所以我们在服务包中创建我们的域。我的第一个问题是:

我们是对的还是我们必须做另一件事?

我的另一个问题是提供这个概念的验证。我们为此使用命令对象。所以现在我们需要对唯一性进行一些自定义验证。我知道我们可以使用 Validator,但我们希望我们的逻辑只保留在服务中。那么我们可以创建这样的东西吗?

static constraints = {
        username size: 5..15
        password size: 5..15, blank: false
        userEmail email: true
        }
username email:true 
userName name:unique

【问题讨论】:

    标签: grails sdn


    【解决方案1】:

    我不明白您为什么如此执着于必须为此使用服务。创建一个使用@Validateable 注释的服务并将其用作非GORM 域类似乎很奇怪。如果它有效,那就太酷了,但这有点像在整个过程中倒车工作。您会到达那里(直到您烧毁变速箱),但是从后视镜中看到一切都在逆转,这将是一次压力很大的驾驶。

    为什么不把类放在 src/groovy 下的一个合理的包中并注释它们呢?你只需要在Config.groovy注册他们,例如

    grails.validateable.classes = [
         com.mycompany.myapp.User, com.mycompany.dto.Account]
    

    您可以进行唯一性检查,但不能使用标准的unique 约束。这与 GORM 相关;它为您的域类查看表或后备存储并运行特定于数据存储的唯一性查询,但这不适用于此处。但是您可以自己轻松地做同样的事情。使用自定义验证器:

    email validator: { value, obj ->
       // run a Neo4j query checking to see if value has
       // been used, the equivalent of
       // "select count(email) from person where email=?"
       // and return false if the count is not zero
    }
    

    【讨论】: