Bean validation

公司测试很是严格,要求咱们对每一个参数的长度进行校验,提了一个参数长度校验的单,而后咱们老大就把咱们的代码所有打回去了。。。。app

一个bean类中每每有超多变量,若是一个个写if else,够呛,并且圈复杂度也会上去。因此我打算使用bean validation。工具

网上找了不少博客,试了一下并无效果,可能由于咱们项目是基于SpringBoot的。测试

下面是我实现的方式。ui

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

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 是结果类,用于封装异常信息spa

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类,进行参数校验code

    @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,传入超过长度的参数,结果以下blog

相关文章
相关标签/搜索