当由组合约束 @NotBlank 注释时,自定义验证器无法(完全)工作
Custom validator doesn't work (completely) when annotated by composed constraint @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
}
}
}
但是我无法让它用 @NotBlank
注释 State
— 因为后者在 @Target
中没有 ElementType.TYPE
),但是用 @NotBlank
.
注释字段本身
我想把它放在 State
中的原因是因为我必须对几个字段重复相同的约束,所以如果 State
可以用 @NotBlank
注释的话完美。
有什么线索吗?
你不能。您将需要定义一个新注释,因为 @NotBlank 具有以下目标:
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
如您所见,您无法将其应用到您的完整界面。
我有一个这样的自定义验证器:
@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
}
}
}
但是我无法让它用 @NotBlank
注释 State
— 因为后者在 @Target
中没有 ElementType.TYPE
),但是用 @NotBlank
.
我想把它放在 State
中的原因是因为我必须对几个字段重复相同的约束,所以如果 State
可以用 @NotBlank
注释的话完美。
有什么线索吗?
你不能。您将需要定义一个新注释,因为 @NotBlank 具有以下目标:
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
如您所见,您无法将其应用到您的完整界面。