Bean validation 重用验证器

Bean validation 重用验证器,bean-validation,hibernate-validator,Bean Validation,Hibernate Validator,我想创建我自己的Annotation约束,因为我有一个字符串,其中包含一个以逗号分隔的电子邮件列表 我从这里开始遵循文档: 在我的项目中,我使用Hibernate验证器作为Bean验证的提供者。我注意到Hibernate提供了一个@Email约束 可以从我自己的验证器类调用org.hibernate.validator.constraints.impl.EmailValidator::isValid吗 我做了以下工作: public class EmailsValidator implement

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

我从这里开始遵循文档:

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

可以从我自己的验证器类调用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;
}
公共类EmailsValidator实现ConstraintValidator{
私有EmailValidator EmailValidator=新EmailValidator();
@凌驾
公共无效初始化(电子邮件约束旋转){
}
@凌驾
公共布尔值有效(字符串值、ConstraintValidatorContext上下文){
System.out.println(“EmailsValidator::isValid”);
if(value==null | | value.isEmpty()){
返回true;
}
最后一个字符串[]emails=value.split(“,\\s*”);
用于(字符串电子邮件:电子邮件){
System.out.println(“anEmail=“+anEmail”);
如果(!emailValidator.isValid(电子邮件,上下文)){
返回false;
}
}
返回true;
}
}

这是最有效的方法吗


再见。

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

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