0

我有一堂课:

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),但在我的情况下应用了两个限制。我应该怎么做,我怎样才能在这种情况下只应用一个限制?

4

1 回答 1

3

您可以将约束分配给不同的验证组并使用组序列验证它们,例如通过重新定义默认组Foo序列:

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约束会因空输入值而失败。

于 2013-01-14T08:44:09.183 回答