【问题标题】:Hibernate Validator generic and cross-parameter constraint parameter passingHibernate Validator 通用和跨参数约束参数传递
【发布时间】: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


【解决方案1】:

因此,您的 IDE 存在的问题是您为注释定义了一个值,但您的注释中没有定义 value() 属性。

但这是你不那么紧迫的问题。

您想要的是一个类级别的约束,并且您正在使用一个交叉参数,希望它会做您想要的。不会的。

要做你想做的事,你需要:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    相关资源
    最近更新 更多