zoukankan      html  css  js  c++  java
  • Bean validation

    公司测试非常严格,要求我们对每个参数的长度进行校验,提了一个参数长度校验的单,然后我们老大就把我们的代码全部打回去了。。。。

    一个bean类中往往有超多变量,如果一个个写if else,够呛,而且圈复杂度也会上去。所以我打算使用bean validation。

    网上找了很多博客,试了一下并没有效果,可能因为我们项目是基于SpringBoot的。

    下面是我实现的方式。

    步骤一. 新建一个bean 上面添加 @Size 注解,@Size注解 是Java bean validation中的一个注解,可以限制变量长度的最大值与最小值。

    public class Student {
    
        @Size(max = 10,message = "id size error")
        private String id;
    
        @Size(max = 10,message = "name size error")
        private String name;
    
        @Size(max = 50,message = "stuId size error")
        private String stuId;
    
        @Size(max = 50,message = "gender size error")
        private String gender;

      ......

    步骤二. 新建util,工具类,然后在其中验证参数的合法性,其中 ResultInfo 是结果类,用于封装异常信息

    public class CommonUtils {
    
        public static ResultInfo isValid(Object object){
            ResultInfo resultInfo = new ResultInfo();
            ValidatorFactory vf = Validation.buildDefaultValidatorFactory();
            Validator validator = vf.getValidator();
    
            Set<ConstraintViolation<Object>> validate = validator.validate(object);
            if (validate == null || validate.size() == 0){
                resultInfo.setStatus(0);
                resultInfo.setMessage("");
            }
            else{
                resultInfo.setStatus(1);
                StringBuilder sbuilder = new StringBuilder();
                for (ConstraintViolation<Object> cv : validate) {
                    sbuilder.append(cv.getMessage()); //添加异常信息
                }
                resultInfo.setMessage(sbuilder.toString());
            }
    
            return resultInfo;
        }
    }

    步骤三:在controller层调用util类,进行参数校验

        @ResponseBody
        @RequestMapping(value = "/getStuByName", method = RequestMethod.POST)
        public String getStuByName(@RequestBody Student student) {
            System.out.println("enter getStuByName");
            System.out.println(JSONObject.toJSONString(student));
            ResultInfo validStr = CommonUtils.isValid(student);
            if(!StringUtils.isEmpty(validStr)){
                return JSONObject.toJSONString(validStr);
            }
            System.out.println("is valid");
            List<Student> students = studentService.getStuByName(student.getName());
            return JSONArray.toJSONString(students);
        }

    步骤四:测试啦,调用url,传入超过长度的参数,结果如下

  • 相关阅读:
    鸿蒙轻内核M核源码分析:数据结构之任务就绪队列
    Elasticsearch数据库优化实战:让你的ES飞起来
    还不会使用分布式锁?教你三种分布式锁实现的方式
    云小课 | 大数据融合分析:GaussDW(DWS)轻松导入MRS-Hive数据源
    JavaScript 空间坐标
    HttpWatch网络抓包工具的使用
    安卓Fragment和Activity之间的数据通讯
    Android MVP模式
    Android从服务端获取json解析显示在客户端上面
    JavaWeb网上商城的反思
  • 原文地址:https://www.cnblogs.com/cuglkb/p/8440716.html
Copyright © 2011-2022 走看看