我想要做的一些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验证基本相同的事情呢?