关于模型添加和更新方法的Spring Hibernate验证器问题

时间:2014-11-25 15:49:14

标签: java spring spring-mvc hibernate-validator

我在Spring中使用过Hibernate验证器,我需要检查模型“Admin”:

@NotEmpty
@Size(min = 4, max = 40)
private String password;

当我保存“admin”时,密码是必需的,我使用了“@Valid @ModelAttribute Admin admin”。 所以在保存之前会进行检查。

但是当我更新管理员时,如果用户没有提供密码,我们认为他不想更改密码,所以密码的空值是合法的,对于这种情况,我们不能再使用“@Valid @ModelAttribute Admin admin”,因为密码属性已经注释了@NotEmpty,所以对于这种情况,我们的方法是自己在代码中手动完成,我想是否有更好的解决方法?我们仍然希望使用Bean验证功能。

还有另一个问题:

@NotEmpty
@Size(min = 2, max = 20)
private String username;
当我们保存用户名时,我们必须检查用户名是否存在,我们需要检查数据库,这种情况如果我们仍然使用bean验证如何解决,定义了一个
类级别注释?

我希望有人能帮助我。感谢

2 个答案:

答案 0 :(得分:1)

您可以使用groups。例如,您的模型将是:

@NotEmpty(groups = CreateAdmin.class)
@Size(min = 4, max = 40)
private String password;

创建管理员组。

public interface CreateAdmin {
}

在Spring控制器中,使用Spring @Validated代替@Valid

管理员创建方法:

@Validated(value = CreateAdmin.class) @ModelAttribute Admin admin

并使用更新方法中的默认组:

@Validated @ModelAttribute Admin admin

现在,@NotEmpty仅在创建管理员时适用。

对于您的第二个问题,you can create a custom constraint,例如@UniqueUsername,并在约束验证器的isValid方法中检查数据库。

答案 1 :(得分:0)

我们已使用SpelAssert from jirutka但是也可以使用@Pattern

处理此类边缘情况