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

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

Bean validation的更多相关文章

  1. Java数据校验(Bean Validation / JSR303)

    文档: http://beanvalidation.org/1.1/spec/ API : http://docs.jboss.org/hibernate/beanvalidation/spec/1. ...

  2. Java Bean Validation 最佳实践

    参数校验是我们程序开发中必不可少的过程.用户在前端页面上填写表单时,前端js程序会校验参数的合法性,当数据到了后端,为了防止恶意操作,保持程序的健壮性,后端同样需要对数据进行校验.后端参数校验最简单的 ...

  3. spring 3.1 配置 JCR 303 Bean Validation

    A) 导入Hibernate-Validator  要使用JSR303 校验框架, 需要加入框架的具体实现Hibernate-Validator, 在soureforge上下载最新的Hibernate ...

  4. Java bean validation 规范与参考实现

    1.Apache Bval 依赖包:validation-api-1.1.0.Final.jar org.apache.bval.bundle-1.1.1.jar bval-core-1.1.1.ja ...

  5. JSR 303 - Bean Validation 介绍及最佳实践

    JSR 303 - Bean Validation 介绍及最佳实践 JSR 303 – Bean Validation 是一个数据验证的规范,2009 年 11 月确定最终方案.2009 年 12 月 ...

  6. 使用hibernate时出现 org.hibernate.HibernateException: Unable to get the default Bean Validation factory

    hibernate 在使用junit测试报错: org.hibernate.HibernateException: Unable to get the default Bean Validation ...

  7. 基于springmvc的简单增删改查实现---中间使用到了bean validation

    package com.kite.controller; import java.util.HashMap; import java.util.Map; import javax.validation ...

  8. Bean Validation 技术规范特性概述

    概述 Bean Validation 规范 Bean 是 Java Bean 的缩写.在 Java 分层架构的实际应用中,从表示层到持久化层.每一层都须要对 Java Bean 进行业务符合性验证,如 ...

  9. JSR303 Bean Validation 技术规范特性概述

    概述 Bean Validation 规范 Bean 是 Java Bean 的缩写,在 Java 分层架构的实际应用中,从表示层到持久化层,每一层都需要对 Java Bean 进行业务符合性验证,如 ...

  10. juit测试中报错:org.hibernate.HibernateException: Unable to get the default Bean Validation factory

    org.hibernate.HibernateException: Unable to get the default Bean Validation factory 解决方法: 解决方案: 在hib ...

随机推荐

  1. ORA-00904:标识符无效

    1.错误描述 ORA-00904:"TTT"."RN":标识符无效 00904 . 00000 - "%s:invalid identifier&qu ...

  2. 芝麻HTTP:爬虫之设置Selenium+Chrome代理

    微博登录限制了错误次数···加上Cookie大批账号被封需要从Cookie池中 剔除被封的账号··· 需要使用代理··· 无赖百度了大半天都是特么的啥玩意儿???结果换成了 Google手到擒来 分分 ...

  3. trs.getElementsByTagName is not a function 出现原因及解决办法

    好久没有操作dom元素了,在定义dom元素时, let tBo = document.getElementById('tBody') let trs = tBo.getElementsByTagNam ...

  4. Unity3d 截屏保存到相册,并且刷新相册

    要做一个截图的功能,并且玩家可以在相册中看到. 做的时候遇到了三个问题: 1.unity自带的截图API,Application.CaptureScreenshot在Android上不生效 2.图片保 ...

  5. n人围成一圈报数

    题目:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位 思路:用一个数组存这n个人,里面的初始状态全设为1,表示都还在圈子里面. ...

  6. flash数据交互

    新随笔 联系 订阅 管理 随笔 - 14  文章 - 5  评论 - 0 安卓中webview读取html,同时嵌入Flex的SWF,交互 安卓activity与html交互很简单,用javascri ...

  7. 初学者第二节之HelloWorld

    ava具有简单性.面向对象.分布式.健壮性.安全性.平台独立与可移植性.多线程.动态性等特点.Java可以编写桌面应用程序.Web应用程序.分布式系统和嵌入式系统应用程序等. 一.首先创建一个Hell ...

  8. [SPOJ]DISUBSTR:Distinct Substrings&[SPOJ]SUBST1:New Distinct Substrings

    题面 Vjudge Vjudge Sol 求一个串不同子串的个数 每个子串一定是某个后缀的前缀,也就是求所有后缀不同前缀的个数 每来一个后缀\(suf(i)\)就会有,\(len-sa[i]+1\)的 ...

  9. jxl 导出数据到excel

    优点: Jxl对中文支持非常好,操作简单,方法看名知意. Jxl是纯javaAPI,在跨平台上表现的非常完美,代码可以再windows或者Linux上运行而无需重新编写 支持Excel 95-2000 ...

  10. Redis之Hash

    一.Redis之Hash简介 1. Hash是一个string类型的field和value的映射表,适合用于存储对象. 2. 每个hash可以存储232-1个键值对(40多亿). 二.Redis之Ha ...