我正在尝试创建一个类级别的 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
}
}
这是明智的做法吗?如果是,您建议我使用什么方法?如果属性的类型不正确,应该采取什么措施?