使用验证器依赖性注入配置自定义验证

时间:2017-08-17 16:10:03

标签: java validation javabeans bean-validation hibernate-validator

我尝试使用Hibernate Validation 6.0.1定义约束定义,其中验证器位于相对于约束注释的不同位置(.jar / project)。 Aka,我有我要在项目中验证的对象" api"使用注释定义,但我在项目中有验证器" modules / common"

我正在关注the documentation中描述的内容。

配置文件

@Bean
public Validator validator() {

    HibernateValidatorConfiguration configuration = Validation
            .byProvider( HibernateValidator.class )
            .configure();

    ConstraintMapping constraintMapping = configuration.createConstraintMapping();

    constraintMapping
            .constraintDefinition(ValidationComplexePerson.class)
                .validatedBy(ValidationComplexePersonValidator.class);

    return configuration.addMapping( constraintMapping )
            .buildValidatorFactory()
            .getValidator();

约束注释

@Documented
@Constraint(validatedBy = { })
@Target({TYPE, ANNOTATION_TYPE})
@Retention(RUNTIME)
public @interface ValidationComplexePerson {
...}

验证

public class ValidationComplexePersonValidator 
     implements ConstraintValidator<ValidationComplexePerson, Personne> {

@Override
public void initialize(ValidationComplexePerson constraintAnnotation) {
}

@Override public boolean isValid(
          Personne personne, 
          ConstraintValidatorContext constraintValidatorContext) {
    if (personne.nom.matches(".*\\d+.*")) {
        return false;
    }
    return true;
}

我的问题 我遇到的问题是,如果我没有把#34; @Constraint(validatedby = {})&#34;在Annotation中,我收到了错误

  

HV000116:在创建约束定义时,必须使用@ javax.validation.Constraint对注释类型进行注释。

到达&#34; .constraintDefinition&#34;在Bean配置中。

另一方面,如果我把&#34; @Constraint(validatedby = {})&#34;,我得到了

  

错误:(17,1)java:对于非组合约束的验证器   必须使用@ Constraint#validatedBy()指定实现。

有关该解决方案可能是什么或替代方案的任何建议?

我还尝试了here提供的程序。

1 个答案:

答案 0 :(得分:1)

我怀疑你正在使用注释处理器,因为你的第二个错误来自它?

问题是在这种情况下注释处理器检查不正确。我认为我们应该删除它,因为无法使用编程API进行此检查。

暂时删除注释处理器,它应该可以正常工作。

我打开https://hibernate.atlassian.net/browse/HV-1470来跟踪此问题。