【发布时间】:2019-06-06 14:40:14
【问题描述】:
我想分两步验证我的实体。虽然我使用 defaultValidatorFactory 在持久化到数据库之前验证我的实体的所有字段,但我想在前面的步骤中对我的实体进行部分验证。但我找不到配置验证器(或验证器工厂)的方法。
假设我有以下课程:
public class Car {
@NotNull
private String manufacturer;
@AssertTrue
private boolean isRegistered;
public Car(String manufacturer, boolean isRegistered) {
super();
this.manufacturer = manufacturer;
this.isRegistered = isRegistered;
}
}
当我对我的实体进行全面验证时,我使用给定的代码:
Validator validator = validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<Car>> errors = validator.validate(car);
这可以正常工作并验证 NotNull 和 AssertTrue 两个注释。
现在,我想执行部分验证。我的意思是部分验证,我只想验证 NotNull 约束并忽略其他注释。
有没有办法获得使用自定义受限验证器列表的 Validator 或 ValidatorFactory?
您可以找到很多东西来创建自己的约束/约束验证器。就我而言,我只想验证一些约束。
也许我可以创建一个自定义 ConstraintValidatorFactory 并将其注入到验证上下文中?发现我们可以用下面的代码重新配置工厂的上下文,但是不知道怎么处理。
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
validatorFactory.usingContext().constraintValidatorFactory(myCustomFactory);
目前,我迷路了。有人已经做过类似的事情了吗?你知道我该怎么做吗?感谢您的宝贵时间。
我正在使用 Java 8 和 Hibernate Validator 6.0.14。
【问题讨论】:
-
@Slaw 事实上,我一直在寻找团体的替代方案。我有大量的实体要检查(大约 50 多个类)和 3 个要预先验证的约束。我希望我可以使用自定义验证器来代替更改所有实体约束。
标签: java validation hibernate-validator