私は Bean 検証に取り組んでおり、独自の Bean 検証アノテーションのデフォルト グループを設定する可能性を探しています。
私はこのようなもの(作業)を持っています:
Application.class (MyBean で検証を呼び出す)
public class Application {
public static void main(String[] args) {
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<MyBean>> violations =
validator.validate(new MyBean(), SecondStep.class);
}
}
MyBean.class (Bean 自体。これが私が防ぎたいことです)
public class MyBean {
// I don't want to write this "groups" attribute every time, because it's very clear,
// that this should only be validated for the second step, isn't it?
@RequiredBySecondStep(groups=SecondStep.class)
private Object myField;
}
RequiredBySecondStep.class (Bean 検証アノテーション)
@Documented
@Target(FIELD)
@Retention(RUNTIME)
@Constraint(validatedBy = RequiredBySecondStepValidator.class)
public @interface RequiredBySecondStep {
String message() default "may not be null on the second step";
Class<?>[] groups() default {}; // <-- here I want to set SecondStep.class
Class<? extends Payload>[] payload() default {};
}
RequiredBySecondStepValidator.class (実装された制約バリデーター)
public class RequiredBySecondStepValidator implements ConstraintValidator<RequiredBySecondStep, Object> {
public void initialize(RequiredBySecondStep constraintAnnotation) {
}
public boolean isValid(Object object, ConstraintValidatorContext constraintContext) {
return object != null;
}
}
SecondStep.class (Bean 検証グループ)
public interface SecondStep {
}
RequiredBySecondStep
残念ながら、仕様上、次のようにアノテーションでデフォルト グループを設定することはできません。
Class<?>[] groups() default SecondStep.class;
// and using just the following in the bean:
@RequiredBySecondStep
private Object myField;
これにより、RuntimeException が発生します。
javax.validation.ConstraintDefinitionException: groups() のデフォルト値は空の配列でなければなりません
さらに、SecondStepだけではありません。@RequiredByFirstStep
またはで直接注釈を付けたい 5 つの異なるグループがあると思われ@RequiredByFifthStep
ます。
これを実装する良い方法はありますか?