java - 一个字段上有两个 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 void setPassword(String password) {
        this.password = password;
    }
}

如您所见,有一个“密码”字段和两个验证注释。但是,在某些情况下,我希望只应用其中之一,而不是同时应用两者。 例如:如果我有空字符串:“”,我希望只应用一个限制:第一个(@Length),但在我的情况下应用了两个限制。 我该怎么办,如何在这种情况下只应用一项限制?

最佳答案

您可以将约束分配给不同的 validation groups并使用组序列验证它们,例如通过重新定义default group sequence对于 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 约束对于空输入值会失败。

关于java - 一个字段上有两个 hibernate validator 。仅需选择一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14307840/

相关文章:

java - 如何修复 CrudRepository.save(java.lang.Object) 在 springboot 中没有访问器方法?

java - 是否有使用带注释的方法参数启用 JSR 303 Bean 验证的标准方法

java - 在 Tomcat 上部署 JSF war 时出现异常

java - 如何将按钮背景设置为透明?

java - public void actionPerformed(ActionEvent ae) 中表达式的非法开始

java - 使 InputStream 成为非阻塞的

java - 使用 JSR-250 (@RolesAllowed) 注释 Spring MVC 和容器身份验证

java - spring 如何在spring中使用多个@RequestMapping注解?

应用@valid之前的spring mvc进程对象

java - 是否可以使用验证 API 来验证模型对于某些外部操作是否正确?