0

我试图定义与Hibernate验证6.0.1约束定义在验证处于不同的位置(的.jar /项目)相对于约束注释。也就是说,我有我的对象,我想验证是在项目“api”与注释定义,但我将有项目中的验证器“模块/普通”配置自定义验证与验证扶养注射

我是按照所描述的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; 
} 

我的问题 我的问题是,如果我不把“@Constraint(validatedby = {})”中的注释,我得到的错误

HV000116: The annotation type must be annotated with @javax.validation.Constraint when creating a constraint definition.

达到” .constraintDefinition时“在Bean配置中。

在另一方面,如果我把“@Constraint(validatedby = {})”,我得到

Error:(17, 1) java: For non-composed constraints a validator implementation must be specified using @Constraint#validatedBy().

上,这可能是拨错或替代这一解决方案的任何建议?

我也尝试过的程序提出here

回答

1

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

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

只是现在删除注释处理器,它应该工作正常。

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

+0

这样做的窍门,我不知道我是否需要它! –

+0

这很有用,因为它提供了如何使用HV的提示。但我们确实需要它不会为有效配置抛出错误。 –