2012-04-04 20 views
0

我想创建自己的Annatotation约束,因为我拥有一个包含由逗号分隔的电子邮件列表的字符串。重新使用验证程序

我按照文档从这里:http://docs.jboss.org/hibernate/validator/4.1/reference/en-US/html/validator-customconstraints.html

在项目中,我使用Hibernate验证作为供应商对于Bean验证。我注意到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

我认为这种方法通常可行,但您应该意识到您依赖的是内部类的Hibernate验证器,在未来的版本中可能会对其进行更改。事实上,它将被移至HV 4.3中的another package。或者,您可以将正则表达式复制到您自己的验证器中。