2012-04-04 41 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。或者,您可以將正則表達式複製到您自己的驗證器中。