Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一个字段上有两个hibernate验证程序。只需要选择一个_Java_Spring Mvc_Hibernate Validator - Fatal编程技术网

Java 一个字段上有两个hibernate验证程序。只需要选择一个

Java 一个字段上有两个hibernate验证程序。只需要选择一个,java,spring-mvc,hibernate-validator,Java,Spring Mvc,Hibernate Validator,我有一门课: 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 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;
    }
}
如您所见,有一个字段“password”和两个validate注释。但是,在某些情况下,我希望只应用一个,而不是两个。 例如:如果我有一个空字符串:“我希望,只能应用一个限制:第一个(@Length),但在我的情况下,两个限制都应用了。
我该怎么做,如何在这种情况下仅应用一个限制?

您可以将限制分配给不同的限制,并使用组序列验证它们,例如,通过重新定义for
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;

    //...
}
现在,只有当
@Length
约束有效时,才会验证
@Pattern
约束

您的具体情况也可以通过接受
@Password
约束的正则表达式中的空值(
^$
)来解决:

@Pattern(regexp = "(^$|(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).*)", message = "")

这样,两个约束都将被验证,但只有
@Length
约束对于emtpy输入值将失败。

您可以将约束分配给不同的约束,并使用组序列进行验证,例如,通过重新定义for
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;

    //...
}
现在,只有当
@Length
约束有效时,才会验证
@Pattern
约束

您的具体情况也可以通过接受
@Password
约束的正则表达式中的空值(
^$
)来解决:

@Pattern(regexp = "(^$|(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).*)", message = "")

这样,两个约束都将得到验证,但只有
@Length
约束对于emtpy输入值将失败。

如果您熟悉HibernateValidator的自定义验证,则可以根据您的要求自定义验证,例如。这只是一个例子。如果你打算第一次做的话,这可能需要一些时间。您还需要在需要时学习validation group(如果您自定义验证,则必须学习validation group)。如果您熟悉HibernateValidator的自定义验证,则可以根据您的要求自定义验证,例如。这只是一个例子。如果你打算第一次做的话,这可能需要一些时间。您还需要在需要时学习验证组(如果您自定义验证,则必须学习验证组)。非常感谢!!!但是,如果我想限制非空字符串呢。我想将reg exp应用于长度为6到30的任何单词。在其他情况下,应该应用@长度限制?非常感谢!!!但是,如果我想限制非空字符串呢。我想将reg exp应用于长度为6到30的任何单词。在其他情况下,是否应用@长度限制?