spring - 导入的唯一约束未得到验证

标签 spring grails constraints

我有一个Spring Security User类,它对用户名和电子邮件具有唯一的约束。在Command类中,我使用“importFrom User”从此类中导入了所有约束。除唯一约束外,所有约束均按预期工作。

但是,在保存用户时,唯一约束将得到验证并显示错误。但是,如果他们像其他所有约束一样在保存之前得到验证,那就太好了。

更新

我将此添加到 Controller :

user.errors.fieldErrors.each {
    command.errors.rejectValue(it.getField(), it.getCode())
}

似乎是一种肮脏的解决方法,但它可以工作。

最佳答案

@Chris,这是一个好问题,您的解决方案是最好的,因为在域类和命令对象之间共享约束的目的是避免重复验证逻辑。

我只是补充说一下,以避免重复的字段错误并处理域对象中的嵌套字段路径,可能需要执行以下操作。

def save(EntityCreateCommand cmd) {
    def entity = new Entity(cmd.properties)
    def someAssociation = new Something(cmd.properties)
    entity.someAssociation = someAssociation

    entity.validate()

    entity.errors.fieldErrors.each {
        def fieldName = it.field.split("\\.").last()
        def flattenedCodes = cmd.errors.getFieldErrors(fieldName).codes.flatten()
        if(cmd.hasProperty(fieldName) && (!flattenedCodes.contains(it.code))) {
            cmd.errors.rejectValue(fieldName, 
                "entityCreateCommand.${fieldName}.${it.code}")
        }
    }

    if(cmd.errors.hasErrors()) {
        error handling stuff...
    } else {
        business stuff...
    }
}

关于spring - 导入的唯一约束未得到验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12960272/

相关文章:

grails - 如何在ElasticSearch的精彩集锦中过滤掉(损坏的)HTML标签?

c# - 为什么必须最后指定 new() 约束?

iOS:在编辑模式下更改约束

java - hibernate与spring的集成;避免重复连接参数

java - 模拟匿名函数

javascript - Bootstrap 4 弹出窗口无法正常工作?

ios - 按钮与预期的 iO​​S Autolayout 不完全相同

Java & Spring,保留用户定义的过滤器

grails - 访问 PUT 或 POST 请求的原始正文

grails - grails test-app -coverage不包括分支模式下的功能测试的范围