zoukankan      html  css  js  c++  java
  • 手动 JSR 303 校验工具类

    package com.tellhow.fztb.common.util;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    import javax.validation.ConstraintViolation;
    import javax.validation.Validator;
    import java.util.Set;
    
    /**
     * 数据校验相关相关工具
     *
     * @author seliote
     * @since 2020/1/17
     */
    @SuppressWarnings("unused")
    @Component
    public class ValidationUtil {
    
        private static Validator sValidator;
    
        // 注入校验器并转为 static 域
        @Autowired
        public ValidationUtil(Validator validator) {
            sValidator = validator;
        }
    
        /**
         * 获取数据 JSR 303 校验结果集合
         *
         * @param pojo 需要校验的数据,不可为 null
         * @param <T>  数据类型
         * @return 校验结果集合
         */
        public static <T> Set<ConstraintViolation<T>> getConstraintViolation(T pojo) {
            // 参数是 null 直接校验会导致 IllegalArgumentException: HV000116
            return sValidator.validate(pojo);
        }
    
        /**
         * 获取数据 JSR 303 校验结果字符串描述
         *
         * @param pojo 需要校验的数据,不可为 null
         * @param <T>  数据类型
         * @return 校验正确时返回 null,失败时返回对应校验结果字符串描述
         */
        public static <T> String getValidationMsg(T pojo) {
            // 两个校验结果之间的分隔符
            final String separator = ", ";
            StringBuilder stringBuilder = new StringBuilder();
            // 生成字符串
            for (ConstraintViolation<T> violation : getConstraintViolation(pojo)) {
                // 没有类限定,直接返回域名
                stringBuilder.append(violation.getPropertyPath().toString())
                        .append(": ")
                        .append(violation.getMessage())
                        .append(separator);
            }
            // 参数校验正确返回 null
            if (stringBuilder.length() <= 0) {
                return null;
            } else {
                // 删掉末尾的
                int length = stringBuilder.length();
                stringBuilder.delete(length - separator.length(), length);
            }
            return stringBuilder.toString();
        }
    
        /**
         * 校验数据是否符合 JSR 303 规范
         *
         * @param pojo 需要校验的数据,不可为 null
         * @param <T>  数据类型
         * @return 符合返回 true, 否则返回 false
         */
        public static <T> boolean isLegal(T pojo) {
            return getConstraintViolation(pojo).size() <= 0;
        }
    }
    
  • 相关阅读:
    如何得到数据绑定的树节点的父节点
    ImageBrush中的图片如何加载到到MemoryStream
    C#中动态加载和卸载DLL
    SetProcessWorkingSetSize减少内存占用
    wpf中如何改变Listbox选中项的颜色
    怎样把Visual Studio与Perforce关联起来
    在WPF里面如何使用FolderBrowserDialog
    关于WPF的ComboBox中Items太多而导致加载过慢的问题(转载)
    得到系统中所有正打开的文件
    把ResourceDictionary保存为文件,从外部xaml文件加载ResourceDictionary
  • 原文地址:https://www.cnblogs.com/seliote/p/12205845.html
Copyright © 2011-2022 走看看