首页 > 解决方案 > 当由组合约束 @NotBlank 注释时,自定义验证器不起作用(完全)

问题描述

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

@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
    }
  }
}

但是我无法让它与注释State一起工作@NotBlank——因为后者没有ElementType.TYPEin @Target),而是用 . 注释字段本身@NotBlank

我想要它的原因State是因为我必须对几个字段重复相同的约束,所以如果State可以用注释@NotBlank将是完美的。

有什么线索吗?

标签: javabean-validation

解决方案


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

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

如您所见,您不能将其应用于您的完整界面。


推荐阅读