找不到字符串字段的验证器

No validator can be found for String field

我有一个自定义界面:

@Target({ FIELD })
@Retention(RUNTIME)
@Constraint(validatedBy = { MyCustomValidator.class })
@Documented
public @interface ValidData {

    String message() default EMPTY;

    Class<?>[] groups() default { };

    Class<? extends Payload>[] payload() default { };

}

我有一个 class,其中一个字段附加了这个验证器:

public class RecoverData {

    @ValidData(groups = AfterDefaultGroup.class)
    private String data;

MyCustomValidator class有以下方法:

public class MyCustomValidator implements ConstraintValidator<ValidData, RecoverData> {

    @Override
    public boolean isValid(RecoverData recoverData, ConstraintValidatorContext constraintValidatorContext) {
        //my custom logic regarding recoverData.getData()
        return true;
    }
}

现在,当我尝试 运行 它时,出现以下错误:

No validator could be found for constraint 'com.myPackage.ValidData' validating type 'java.lang.String'. Check configuration for 'data'

遇到这种情况我该怎么办?

您已应用您的自定义验证器用于 String 字段 而不是 RecoverData 类型 - 所以您的自定义验证器实际上应该是:

public class MyCustomValidator implements ConstraintValidator<ValidData, String> {

  @Override
  public boolean isValid(String data, ConstraintValidatorContext context) {
    //my custom logic regarding recoverData.getData()
    return true;
  }

}