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