我有一个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/