【发布时间】:2018-04-20 23:53:35
【问题描述】:
我想检查 startDate 字段中的值是否在值 endDate 字段“之前”。 这是我的 Bean 类:
@AfterStartDate({"startOfDilation","endOfDilation"})
public class MyBean{
private Date startDate,
private Date stopDate,
...
}
注释给出错误“找不到方法value”。我定义对了吗?我也想将此注释用于其他 bean 类。所以,这就是我不想使用 MyBean 类将值传递给 Annotation 类的原因。
AfterStartDate.java
@Target({ ElementType.METHOD, ElementType.CONSTRUCTOR,ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = AfterStartDateValidator.class)
public @interface AfterStartDate {
String message() default "{AfterStartDate.message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
AfterStartDateValidator.java
@SupportedValidationTarget(ValidationTarget.PARAMETERS)
public class AfterStartDateValidator implements ConstraintValidator<AfterStartDate,Object[]> {
@Override
public void initialize(AfterStartDate constraintAnnotation) {
}
@Override
public boolean isValid(Object[] value, ConstraintValidatorContext context){
if ( value.length != 2 ) {
throw new IllegalArgumentException( "Illegal method signature" );
}
//leave null-checking to @NotNull on individual parameters
if ( value[0] == null || value[1] == null ) {
return true;
}
if ( !( value[0] instanceof Date ) || !( value[1] instanceof Date ) ) {
throw new IllegalArgumentException(
"Illegal method signature, expected two " +
"parameters of type Date."
);
}
return ( (Date) value[0] ).before( (Date) value[1] );
}
}
【问题讨论】:
-
请提供堆栈跟踪。
标签: java date annotations hibernate-validator