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的提示。但我們確實需要它不會爲有效配置拋出錯誤。 –