访问 javax.validation.ConstraintValidator 中的主对象

Cre*_*ure 6 java validation

我正在尝试使用 javax.validation 框架来满足所有 Web 应用程序的验证需求。为了做到这一点,我需要编写一些验证器来访问正在验证的主对象。例如,假设我的对象具有 startDate 和 endDate,我需要进行验证以确保 startDate 不大于 endDate。或者一个字段的验证取决于主对象内另一个字段的内容的任何其他场景。

我的问题是:如何从验证器访问这些其他字段或主对象本身。我有一种感觉,我也许可以通过constraintValidatorContext 到达它,但还没有弄清楚如何。

我使用以下内容编写自定义验证器:https://docs.jboss.org/hibernate/validator/4.1/reference/en-US/html/validator-customconstraints.html

ConstraintValidator 是否适合这里的工作?基本上,我的最终目标是通过像这样循环验证器来完成所有验证:

    ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
    Validator validator = factory.getValidator();
    Set<ConstraintViolation<MyClass>> violations = validator.validate(myObject);

    for(ConstraintViolation<MyClass> validation : violations)
    {
        // put error message in a collection to display in the jsp
    }
Run Code Online (Sandbox Code Playgroud)

并且在检查每个字段的验证方法中没有一整串 if/elses 或 try/catch。

另外,我的项目没有使用像Hybernate或Spring这样的任何框架,目前我还不能真正将它们集成到其中。这只是一个标准的Servlet/jsp项目。

JB *_*zet 7

如果验证器要同时验证对象的两个相关字段,则它应该验证对象本身,而不是对象的一个​​字段。并且相应的注释应该在类上,而不是在类的字段上。