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

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

最新文章

  1. Spark源码学习1.5——BlockManager.scala
  2. .Net工程详解及项目版本管理
  3. kindle 贴膜
  4. 在线读取office 文件(Word excel 等)
  5. 再谈C++继承
  6. SQL逻辑读变成零
  7. [rsync]——rsync文件同步和备份
  8. 【原创】Android多个xml文件的使用
  9. [IoLanguage]Io Programming Guide[转]
  10. 将warning设为错误
  11. 【Testin实验室】MoiMark安卓中国终端体验性能排行榜(11月报)
  12. BF533的SPORT接口
  13. C# WinForm 类似QQ靠近屏幕边缘隐藏显示
  14. selenium实例:unittest框架+PO开发模式
  15. 转:【Java并发编程】之十五:并发编程中实现内存可见的两种方法比较:加锁和volatile变量
  16. a*b(mod m)的实现过程
  17. [Python]Flask构建网站分析应用
  18. Session知识点
  19. Python学习第十六篇——异常处理
  20. AS 中 Plugin for Gradle 和 Gradle 之间的版本对应关系

热门文章

  1. 关于这个该死的报错:TypeError - &#39;undefined&#39; is not a function (evaluating &#39;_getTagName(currWindow).toLowerCase()&#39;)
  2. Request对象实现请求转发区别
  3. [HNOI2011]XOR和路径
  4. 服务器安装centos
  5. Win10下用Anaconda安装TensorFlow
  6. struct 2 基本知识
  7. Win10+QT5.7.1搭建opencv开发环境
  8. Nginx实现集群的负载均衡配置过程详解
  9. 线程实现ServerSocket和Socket实现数据交互
  10. IPFS: Merkle DAG数据结构