【问题标题】:Hibernate Validator : restrict validation to given constraintsHibernate Validator:将验证限制为给定的约束
【发布时间】: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。

【问题讨论】:

标签: java validation hibernate-validator


【解决方案1】:

正如 Slaw 所写 - 使用组。

一个例子

package jpatest.jpatest;

import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.constraints.NotNull;

public class TestApp {

    /** A validation group marker */
    public interface ValidationGroup1 {};

    /** The bean  */
    public static class Bean {

        // Validate for group ValidationGroup1
        @NotNull(groups = ValidationGroup1.class)
        private String s;
    }

    public static void main(String[] args) {
        Bean b = new Bean();
        Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
        // Validation without the validation group => No ConstraintViolation
        Set<ConstraintViolation<Bean>> errors1 = validator.validate(b);
        assert errors1.isEmpty() : "No ConstraintViolation expected";
        // Validation with the validation group => 1 ConstraintViolation
        Set<ConstraintViolation<Bean>> errors2 = validator.validate(b, ValidationGroup1.class);
        assert errors2.size() == 1 : "1 ConstraintViolation expected";
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 2014-02-27
    • 2014-02-08
    相关资源
    最近更新 更多