将应用程序上下文传递给JSR 303 ConstraintValidator

时间:2014-03-10 15:06:29

标签: bean-validation hibernate-validator

我想要做的一些JSR-3验证是上下文敏感的。

例如,我的Web应用程序为每个请求都有一个“年”上下文。当持久化新bean时,我希望能够将year属性限制在当前请求上下文的年份内。

 @InCurrentContextYear
 private LocalDate activationDate;

当前年份包含在我想要(以某种方式)传递到约束验证器的请求对象中。例如:

public class InCurrentContextYearValidator 
                  implements ConstraintValidator<InCurrentContextYear, LocalDate>{

    @Override
    public void initialize(InCurrentContextYear constraintAnnotation) {}

    @Override
    public boolean isValid(
                          LocalDate value, 
                          ConstraintValidatorContext context,
                          Request request) {

        return DateUtil.isInRequestYear(value, request)
    }
}

现在我可以使用线程本地存储来做到这一点,但我想知道是否有更好的方法。

我确实认识到这有点超出了“bean验证”的范围,但似乎对这些事情使用注释是一种可辩护的方法。注释允许我将bean保留为POJO,并将服务作为记录属性规则的好方法。 那么为什么我需要一个完全独立的机制来完成与bean验证基本相同的事情呢?

0 个答案:

没有答案