我尝试使用javax.validation框架来满足所有网络应用的验证需求。为了做到这一点,我需要编写一些验证器来访问被验证的主要对象。例如,让我们说我的对象有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
}
并且在validate方法中没有完整的if / elses或try / catches字符串来检查每个字段。
此外,我的项目不使用任何类似Hybernate或Spring的框架,此时我无法将它们集成到它中。它只是一个标准的Servlet / jsp项目。
答案 0 :(得分:2)
如果验证器应该一次验证对象的两个相关字段,它应该验证对象本身,而不是对象的一个字段。相应的注释应该在类上,而不是在类的字段上。