我想创建自己的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;
}
}
这是最有效的方法吗?
再见。
答案 0 :(得分:1)
我认为这种方法通常有效,但您应该知道您依赖于Hibernate Validator的内部类,这可能会在将来的版本中进行更改。实际上它将在HV 4.3中移动到another package。或者,您可以将正则表达式复制到您自己的验证器中。