あるプロパティが別のプロパティの前に発生することを確認するクラス レベルの JSR-303 検証定義を作成しようとしています。この検証は Calendar プロパティに対してのみ意味があるため、initialize メソッドでプロパティ タイプをテストできるかどうか疑問に思っていました。
私の注釈の定義は次のとおりです。
@Target({TYPE, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = TemporalSequenceValidator.class)
@Documented
public @interface TemporalSequence {
String message() default "{uk.co.zodiac2000.vcms.constraints.TemporalSequence}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String first();
String second();
}
およびバリデータの実装:
public class TemporalSequenceValidator implements
ConstraintValidator<TemporalSequence, Object> {
private String firstFieldName;
private String secondFieldName;
@Override
public void initialize(final TemporalSequence constraintAnnotation) {
firstFieldName = constraintAnnotation.first();
secondFieldName = constraintAnnotation.second();
// Is it possible to test type of firstFieldName and
// secondFieldName properties here?
}
@Override
public boolean isValid(final Object value, final ConstraintValidatorContext context) {
// omitted
}
}
これは賢明なことですか?もしそうなら、どのようなアプローチを使用することをお勧めしますか? また、プロパティが正しいタイプでない場合、どのようなアクションが発生する必要がありますか?