我有一个班级:
public class Foo {
@Length(min = 6, max = 30)
@Pattern(regexp = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).*)", message = "{error.password.too_simple}")
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
如您所见,有一个字段'密码'和两个验证注释。但是,在某些情况下,我希望只应用一个,而不是两个。 例如:如果我有空字符串:“”我想要,只应用一个限制:第一个( @Length ),但在我的情况下应用了两个限制。 我该怎么办,如何在这种情况下只应用一个限制?
答案 0 :(得分:3)
您可以将约束分配给不同的validation groups并使用组序列验证它们,例如通过重新定义Foo
的{{3}}:
public interface EmptyChecks {}
@GroupSequence( { EmptyChecks.class, Foo.class } )
public class Foo {
@Length(min = 6, max = 30, groups=EmptyChecks.class)
@Pattern(regexp = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).*)", message = "{error.password.too_simple}")
private String password;
//...
}
现在只有在@Pattern
约束有效时才会验证@Length
约束。
您的具体案例也可以通过在^$
约束的正则表达式中接受空值(@Password
)来解决:
@Pattern(regexp = "(^$|(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).*)", message = "")
这样两种约束都将被验证,但只有@Length
约束对于emtpy输入值才会失败。