重新使用验证器

时间:2012-04-04 15:58:39

标签: bean-validation hibernate-validator

我想创建自己的Annatotation Constraint,因为我有一个字符串,其中包含一个逗号分隔的电子邮件列表。

我按照此处的文档:http://docs.jboss.org/hibernate/validator/4.1/reference/en-US/html/validator-customconstraints.html

在我的项目中,我使用Hibernate Validator作为Bean验证的Provider。我注意到Hibernate提供了@Email约束。

是否可以从我自己的Validator类中调用org.hibernate.validator.constraints.impl.EmailValidator :: isValid?

我做了以下工作:

public class EmailsValidator implements ConstraintValidator<Emails, String> {

private EmailValidator emailValidator = new EmailValidator();

@Override
public void initialize(Emails constraintAnnotation) {
}

@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
    System.out.println("EmailsValidator::isValid");
    if (value == null || value.isEmpty()) {
        return true;
    }
    final String[] emails = value.split(",\\s*");
    for (String anEmail : emails) {
        System.out.println("anEmail = " + anEmail);
        if (!emailValidator.isValid(anEmail, context)) {
            return false;
        }
    }
    return true;
}

}

这是最有效的方法吗?

再见。

1 个答案:

答案 0 :(得分:1)

我认为这种方法通常有效,但您应该知道您依赖于Hibernate Validator的内部类,这可能会在将来的版本中进行更改。实际上它将在HV 4.3中移动到another package。或者,您可以将正则表达式复制到您自己的验证器中。