
Spring框架使用到的JSR303数据校验
发布日期:2021-05-07 22:02:32
浏览次数:16
分类:精选文章
本文共 1774 字,大约阅读时间需要 5 分钟。
JSR303 数据校验 是一套基于 JavaBean 的参数校验标准,广泛应用于前后端开发中。以下将从基础概念到实际应用详细阐述 JSR303 的使用方法。
JSR303 的核心是通过定义校验注解,直接注入到 JavaBean 的属性上,从而实现数据验证的自动化。常用的校验注解包括 @NotNull、@Null、@Digits 等,这些注解能够有效确保数据的合法性。例如,@NotNull 可以防止字段为空,@Digits 则可以验证数字的合法性。Hibernate Validator 是 JSR303 的扩展,提供了诸如 @Email、@Length 等更专业的校验功能。
在实际项目中,首先需要添加相关的 JAR 包。对于普通的 Web 项目,需要下载并拷贝以下 JAR 文件到 WEB-INF/lib 目录:
- hibernate-validator-4.3.0.Final.jar
- validation-api-1.0.0.GA.jar
- jboss-logging.jar
Spring 项目中,需要在配置文件中配置一个 ValidatorFactoryBean。例如,在 spring.xml 中添加:
在 JavaBean 中,通过添加相应的校验注解即可实现数据验证。例如:
@Pattern(regexp="^20[0-1]{1}[0-9]{7}$", message = "学号只能以20开头的十位数字")public String stuId;@Pattern(regexp="(^[a-zA-Z0-9]{2,5}$)|(^[\u2E80-\u9FFF]{2,5}$)", message = "用户名可以是2-5位中文或者2-5位英文与数字的组合")public String name;@Pattern(regexp="(^[1-9]{2})$|(^[1-9]{1}$)", message = "年龄可以是1位至2位的数字")public String age;
在 Web 控制器中,需要使用 @Valid 注解来标记需要校验的对象,并通过 BindingResult 接收校验结果。例如:
@ResponseBody@RequestMapping(value = "/insertStudent", method = RequestMethod.POST)public Object insertStudent(@Valid Student student, BindingResult res) { AjaxResult result = new AjaxResult(); Mapmap = new HashMap (); if (res.hasErrors()) { List fieldErrors = res.getFieldErrors(); for (FieldError fieldError : fieldErrors) { System.out.println("错误的字段名: " + fieldError.getField()); System.out.println("错误的信息: " + fieldError.getDefaultMessage()); map.put(fieldError.getField(), fieldError.getDefaultMessage()); } result.setRes(false); result.add("errorFields", map); return result; } else { studentService.insertStudent(student); result.setRes(false); return result; }}
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月16日 22时56分15秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Node.js包使用系列(一)——修改NPM全局下载和缓存路径
2019-03-05
TDengine使用(一)——TDengine下载与安装
2019-03-05
6.14编一个程序,将两个字符串s1和s2比较,不要用strcmp函数。
2019-03-05
Java纯文本文件显示工具制作
2019-03-05
Unity2D Fixed Joint 2D详解
2019-03-05
六、Numpy的使用(详解)
2019-03-05
三、案例:留言板 & url.parse()
2019-03-05
Python中的filter()函数!!!1
2019-03-05
(新手小白必学!)用Python设计和实现聪明的尼姆游戏(人机对战)!!!!
2019-03-05
Python实验26:计算文件MD5值
2019-03-05
端口探测
2019-03-05
LeetCode:28. 实现 strStr()——————简单
2019-03-05
LeetCode:697. 数组的度————简单
2019-03-05
LeetCode:1052. 爱生气的书店老板————中等
2019-03-05
C语言的6大基本数据类型!(学习C语言小白必备!!)
2019-03-05
Vue——mock模拟数据的使用
2019-03-05
Nginx配置反向代理与负载均衡
2019-03-05
高阶函数reduce
2019-03-05
Lionheart万汇:布林线双底形态分析技巧
2019-03-05