公司測試很是嚴格,要求咱們對每一個參數的長度進行校驗,提了一個參數長度校驗的單,而後咱們老大就把咱們的代碼所有打回去了。。。。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