我在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验证如何解决,定义了一个我希望有人能帮助我。感谢
答案 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