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

一个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. Http请求封装基类HttpHelper.cs

    HttpHelper请求封装基类,支持get请求和POS请求http接口交互,为后面接口交互做准备. 1.HttpHelper帮助基类 using System; using System.Colle ...

  2. 芝麻HTTP:pyspider的安装

    pyspider是国人binux编写的强大的网络爬虫框架,它带有强大的WebUI.脚本编辑器.任务监控器.项目管理器以及结果处理器,同时支持多种数据库后端.多种消息队列,另外还支持JavaScript ...

  3. Django学习-13-simple_tag使用

    一些HTML方法                {{item.event_start | date:"Y-m-d H:i:s"}}                     {{bi ...

  4. 小程序中点击input控件键盘弹出时placeholder文字上移

    最近做的一个小程序项目中,出现了点击input控件键盘弹出时placeholder文字上移,刚开始以为是软键盘弹出布局上移问题是传说中典型的fixed 软键盘顶起问题,因此采纳了网上搜到的" ...

  5. myeclipse 打开jsp文件出错

    第一步:找到MyEclipse的安装路径:第二步:删除掉MyEclipse\configuration下名为:org.eclipse.update的文件夹:第三步:产出之后重启myeclipse,在打 ...

  6. BZOJ 1079: [SCOI2008]着色方案(巧妙的dp)

    BZOJ 1079: [SCOI2008]着色方案(巧妙的dp) 题意:有\(n\)个木块排成一行,从左到右依次编号为\(1\)~\(n\).你有\(k\)种颜色的油漆,其中第\(i\)种颜色的油漆足 ...

  7. 洛谷P4003 无限之环(infinityloop)(网络流,费用流)

    洛谷题目传送门 题目 题目描述 曾经有一款流行的游戏,叫做 Infinity Loop,先来简单的介绍一下这个游戏: 游戏在一个 n ∗ m 的网格状棋盘上进行,其中有些小方格中会有水管,水管可能在格 ...

  8. golang []byte转string

    golang中,字符切片[]byte转换成string最简单的方式是 package main import ( "fmt" _ "unsafe" ) func ...

  9. C# 程序之间传参数,Args 接收参数的处理

    备忘,或者留给暂未接触但需要了解的人. C#在一个进程内传参数方法那是相当多,但是涉及到程序之间传参数就不是那么方便了(当然socket,内存共享等方式属于另一类,此处不讨论),我们的C或者C#,亦或 ...

  10. c#抽取pdf文档标题(4)——机器学习以及决策树

    我的一位同事告诉我,pdf抽取标题,用机器学习可以完美解决问题,抽取的准确率比较高.于是,我看了一些资料,就动起手来,实践了下. 我主要是根据以往历史块的特征生成一个决策树,然后利用这棵决策树,去判断 ...