validation - 验证命令对象中的嵌套域类实例

标签 validation grails command-objects

我尝试验证命令对象上的嵌套域类实例。

具有以下命令对象

package demo

import grails.databinding.BindingFormat

class SaveEventCommand {

    @BindingFormat('yyyy-MM-dd')
    Date date

    Refreshment refreshment

    static constraints = {
        date validator: { date -> date > new Date() + 3}
        refreshment nullable: true
    }
}

并且具有以下具有自己约束的 Realm 类
package demo

class Refreshment {

    String food
    String drink
    Integer quantity

    static constraints = {
        food inList: ['food1', 'food2', 'food3']
        drink nullable: true, inList: ['drink1', 'drink2', 'drink3']
        quantity: min: 1
    }
}

当刷新不可为空时,我需要命令对象验证date属性并检查刷新实例中的相应限制

现在,尝试在 Controller 中使用以下代码:
def save(SaveEventCommand command) {
    if (command.hasErrors() || !command.refreshment.validate()) {
        respond ([errors: command.errors], view: 'create')

        return
    }

    // Store logic goes here
}

在这里,我通过!command.refreshment.validate()尝试验证刷新实例,但即使没有传递正确的数据,也得到没有错误的结果。

谢谢你的指导,谢谢你的时间

最佳答案

我通常只包含一些代码,这些代码将使用自定义验证器来启动对由另一个命令对象组成的任何属性的验证。例如:

thePropertyInQuestion(nullable: true, validator: {val, obj, err ->
    if (val == null) return
    if (!val.validate()) {
        val.errors.allErrors.each { e ->
            err.rejectValue(
                "thePropertyInQuestion.${e.arguments[0]}",
                "${e.objectName}.${e.arguments[0]}.${e.code}",
                e.arguments,
                "${e.objectName}.${e.arguments[0]}.${e.code}"
            )
        }
    }
})

这样,很明显我希望进行验证。另外,它将所有错误上移到根错误集合中,这对我来说 super 容易。

关于validation - 验证命令对象中的嵌套域类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46902602/

相关文章:

grails - 如何更改 Grails Spring Security Cookie 路径

memory - 在Grails中使用内存域对象的最佳方法是什么?

grails - 如何将 id 列表绑定(bind)到 grails 中的命令对象?

javascript - 验证 ng-repeat Angular 中的项目

javascript - 回发前如何进行验证?

regex - 使用 Go Validator v2 转义正则表达式

Grails 2.5.0 - 命令对象使用 JSON 处理 POST 请求

validation - 使用Camel中的Apache Validator组件进行XML验证

xml - Grails 错误 : invalid XML character (Unicode: 0x5c)

validation - 如何执行已验证的Grails命令对象?