JavaX:Validator框架

发布于 2021-11-26  714 次阅读


通过方法去验证实体参数是否正确,这个框架中有很多注解,可以参考我的另一篇博客

依赖:

Javax ValidationI的依赖:

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.1.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.16.Final</version>
 </dependency>
  

springboot对Javax ValidationI封装,依赖变成
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

简单使用

/**
 * 验证测试类
 */
public class ValidationTest {
 
    // 验证器对象
    private Validator validator;
    // 待验证对象
    private UserInfo userInfo;
    // 验证结果集合
    private Set<ConstraintViolation<UserInfo>> set;
 
    /**
     * 初始化操作
     */
    @Before
    public void init() {
        // 初始化验证器
        validator = Validation.buildDefaultValidatorFactory()
                .getValidator();
 
        // 初始化待验证对象 - 用户信息
        userInfo = new UserInfo();
 
    }
 
    /**
     * 结果打印
     */
    @After
    public void print() {
        set.forEach(item -> {
            // 输出验证错误信息
            System.out.println(item.getMessage());
        });
 
    }
 
    @Test
    public void nullValidation() {
        // 使用验证器对对象进行验证
        set = validator.validate(userInfo);
    }
 
}

封装成工具:

/**
 * @program: test
 * @description: 数据验证
 * @author: MaoSi-WeiPeng
 * @create: 2021-11-24 15:43
 **/
@Component
public class ValidateUtil {
    private volatile static Validator validator;

    private static Validator getValidator() {// 使用spring中定义的factory
        if (validator == null) {
            synchronized (ValidateUtil.class) {
                if (validator == null) {
                    ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
                    validator = factory.getValidator();
                }
            }
        }
        return validator;
    }

    public static <T> void validate(T t)  {
        Set<ConstraintViolation<T>> constraintViolations = getValidator().validate(t);
        if (constraintViolations.size() > 0) {
            for (ConstraintViolation<T> constraintViolation : constraintViolations) {
                String message = constraintViolation.getMessage();
                System.out.println("验证不合法" + message);
            }
        }
    }

    /**
     * @author ls
     * @description 验证 对象字段
     * @param t 验证字段
     * @param includeField 指定验证的字段集合
     */
    public static <T> void validateDataDto(T t, List<String> includeField)  {
        if (t == null) {
            String message = "参数对象为空";
            System.out.println("验证不合法" + message);
        }
        Set<ConstraintViolation<T>> constraintViolations = getValidator().validate(t);
        if (constraintViolations.size() > 0) {
            boolean b = includeField != null;
            String message;
            String field;
            for (ConstraintViolation<T> constraintViolation : constraintViolations) {
                //失败提示
                message = constraintViolation.getMessage();
                //字段
                field = constraintViolation.getPropertyPath().toString();
                //字段集合存在 并且 不验证的字段集合 跳过
                if (b && !includeField.contains(field)) {
                    continue;
                }
                System.out.println("验证不合法" + message);;
            }
        }
    }
}

使用:

 EntityTest entityTest = new EntityTest();
        entityTest.setAge(11);
        entityTest.setName("");
        validateUtil.validate(entityTest);

        ArrayList<String> strings = new ArrayList<>();
        strings.add("name");
        validateUtil.validateDataDto(entityTest,strings);

结果:

验证不合法不能为空
验证不合法最大为10
验证不合法不能为空

参考:https://www.cnblogs.com/dinghaoran/p/12924518.html


欢迎欢迎~热烈欢迎~