手写一个实体类Bean校验器框架

实体类Bean校验器

框架源码地址​​​​​​​

作者:stan

版本:V1.0

我的博客


目录

├── 实体类Bean校验器是什么?

├── 实体类Bean校验器能做什么?

├── 怎么使用实体类Bean校验器?    

实体类Bean校验器是什么?

在平时的业务开发当中,后台开发人员需要对前端传送的数据进行再次校验, 如果每次都写大量的if...else...语句块,会大量浪费开发人员的时间。 同时防止不法人员绕过系统前端页面直接调用API接口的,增加API接口的安全性。

实体类Bean校验器能做什么?

  • 不安全

    绕过系统页面直接请求API,校验不严格可能导致系统错误。

  • 开发高效

    减少开发人员重复编写校验字段代码,专注业务开发,提高开发效率。

  • 简洁

    减少大量重复的if...else...校验代码,使得代码更整洁,结构更清晰,优美。

  • 内置校验规则注解
    •  非空校验 @NotEmpty
    •  数字校验 @Number
    •  身份证校验 @IDCard
    •  Email校验 @Email
    •  固定电话校验 @Tel
    •  手机号码校验 @Mobile
    •  自定义校验 @Pattern

    @Pattern(msg = "校验失败提示语",name = "属性名",ex="正则表达式")


怎么使用实体类Bean校验器?

实体类Bean校验器使用方法及其简单。

  • 1 实体类使用校验注解
   /**
    * 用户信息
    * @author stan
    * @Date 2020/6/8 10:52
    * @version 1.0
    */
   @Data
   public class UserInfo {
       @NotEmpty(msg = "用户名不能为空!",name = "用户名")
       private String userName;
       @Number(msg = "年龄不能为空!",name = "年龄")
       private Integer age;
       @IDCard(msg = "身份证校验失败!",name = "身份证")
       private String idNumber;
       @Email(msg = "邮箱格式有误!",name = "邮箱")
       private String email;
       @Tel(msg = "固定电话格式有误!请正确填写,例如:0755-26802502 或者 26802502",name = "固定电话")
       private String tel;
       @Mobile(msg = "手机号码格式有误!",name = "手机号码")
       private String phone;
       /** 学校-默认不需要校验 **/
       private String school;
   }
  • 2 controller中使用
    • 2.1 使用实体类Bean校验器对添加了校验注解的Bean进行校验
    • 例子:
       /**
        * 校验已添加自定义注解的属性
        * @author stan
        * @Date 2020/6/9 17:38
        * @version 1.0
        */
       @RequestMapping("/validator")
       public String validator(UserInfo userInfo) throws Exception{
           ValidateResult result = BeanValidatorFactory.validate(userInfo);
           if(!result.isResult()){
               return JSONObject.toJSONString(result);
           }
           return "校验成功!欢迎使用Bean校验器工厂校验";
       }
    • 2.2 排除Bean中某些已添加校验注解的属性
    • 例子:
        /**
         * 排除不校验的属性
         * @author stan
         * @Date 2020/6/9 17:38
         * @version 1.0
         */
        @RequestMapping("/excludes")
        public String excludes(UserInfo userInfo) throws Exception{
            List excludes = new ArrayList<>();
            excludes.add("email");
            excludes.add("idNumber");
            ValidateResult result = BeanValidatorFactory.validate(userInfo,excludes);
            if(!result.isResult()){
                return JSONObject.toJSONString(result);
            }
            return "校验成功!欢迎使用Bean校验器工厂校验-不校验指定字段";
        }
    • 2.3 动态添加需要校验的属性,如果原有属性上有自定义校验注解,将按照新的校验格式校验
    • 例子:
        /**
         *@Description 添加其他校验属性
         * 如果原有属性上有自定义校验注解,将按照新的校验格式校验
         *@Author stan
         *@Date 2020-06-13 12:15
         *@Param
         *@return
         */
        @RequestMapping("/addField")
        public String addFile(UserInfo userInfo) throws Exception{
            Set patternFields = new HashSet<>();
            PatternField patternField = new PatternField();
            patternField.setFieldName("idNumber");
            patternField.setRegx("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
            patternField.setMsg("身份证验证失败,改成邮箱验证格式!");
            patternFields.add(patternField);
    
            PatternField patternField1 = new PatternField();
            patternField1.setFieldName("school");
            patternField1.setRegx("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
            patternField1.setMsg("学校名称验证失败,改成邮箱验证格式!");
            patternFields.add(patternField1);
    
            ValidateResult result = BeanValidatorFactory.validate(userInfo,patternFields);
            if(!result.isResult()){
                return JSONObject.toJSONString(result);
            }
            return "校验成功!欢迎使用Bean校验器工厂校验-添加字段校验格式";
        }

你可能感兴趣的:(java编程日记)