Java 自定义验证程序不';当由复合约束@NotBlank注释时,t工作(完全)

Java 自定义验证程序不';当由复合约束@NotBlank注释时,t工作(完全),java,bean-validation,Java,Bean Validation,我有这样一个自定义验证器: @Retention(RetentionPolicy.RUNTIME) @NotBlank(message = "{state.NotBlank}") // Err...it doesn't work @Constraint(validatedBy = { State.Validator.class }) public @interface State { String message() default "{state.invalid}"; Class&l

我有这样一个自定义验证器:

@Retention(RetentionPolicy.RUNTIME)
@NotBlank(message = "{state.NotBlank}") // Err...it doesn't work
@Constraint(validatedBy = { State.Validator.class })
public @interface State {
  String message() default "{state.invalid}";

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

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

  @Component
  final class Validator implements ConstraintValidator<State, String> {
    @Override
    public void initialize(final State constraintAnnotation) { }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
      // return true or false based on some rules
    }
  }
}
@Retention(RetentionPolicy.RUNTIME)
@NotBlank(message=“{state.NotBlank}”)//错误……它不工作
@约束(validatedBy={State.Validator.class})
公共@接口状态{
字符串消息()默认值“{state.invalid}”;
类[]组()默认值{};

Class您不能。您需要定义一个新的批注,因为@NotBlank具有以下目标:

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })

正如您所看到的,您无法将其应用于您的完整界面。

是的,我知道它没有
ElementType.TYPE
,但我想知道是否有解决办法……您希望它检查什么?所有字段?不,只有那些用
@状态注释的字段。
。我可以更改此要求,但我认为没有解决方案无论如何都要这样做,所以你的答案是有效的。