15.SpringMVC核心技术-数据验证
在 Web 应用程序中,为了防止客户端传来的数据引发程序的异常,常常需要对数据进行验证。
输入验证分为客户端验证与服务器端验证。客户端验证主要通过 JavaScript 脚本进 行,
而服务器端验证则主要是通过 Java 代码进行验证。
为了保证数据的安全性,一般情况下,客户端验证与服务器端验证都是要进行的。
我们这里所讲的是 SpringMVC 在服务端是如何对数据进行验证的。
搭建测试环境
1.导入Jar包
SpringMVC 支持 JSR(Java Specification Requests,Java 规范提案)303 - Bean Validation数据验证规范。
而该规范的实现者很多,其中较常用的是 Hibernate Validator。需要注意的是, Hibernate Validator 是与
Hibernate ORM 并列的 Hibernate 的产品之一。这一点从 Hibernate 官 网上所提供的资源形式可以看出它们之间的关系。
所以,除了 SpringMVC 的 Jar 包外,我们还需要导入 Hibernate Validator 的 Jar 包。
这些Jar 包,可以从 Hibernate 官网中直接下载
实现数据验证
1.修改springmvc配置文件
验证器由SpringMVC框架的LocalValidtorFactoryBean类生成,而真正验证器的提供者是HibernateValidator
在SpringMVC 配置文件中 将验证器注册后,需要将其注入给注解驱动
<!-- 验证器 由 SpringMVC框架的 LocalValidtorFactoryBean 类生成 ,而真正的验证器的提供者 则是 HibernateValidator -->
<!-- 验证器注册完成后,需要将其注入给注解驱动 --> <!-- 注册验证器 -->
<bean id="myValidator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
</bean> <mvc:annotation-driven validator="myValidator"/>
2.在实体属性上添加验证注解
使用的验证器注解均是 javax.validation.constraints包中的类
在注解的message属性中,可以使用 {属性名}的方式来引用指定的注解的属性值
//在实体属性上添加验证注解
//使用的验证注解 均为 javax.validation.constraints
//在注解的 message(不满足验证条件后的返回的提示信息) 中,可以使用 {属性名} 的方式,来引用属性的 值
public class Person {
@NotEmpty(message="用户名不能为空")
@Size(min=3,max=6,message="用户名长度应为 {min} - {max}位")
private String name; @Max(value=100,message="分数不能超过 {value}")
@Min(value=0,message="分数不能低于 {value}")
private double score; @NotEmpty(message="手机号不能为空")
@Pattern(regexp="^1[34578]\\d{9}$",message="手机号码格式不正确")
private String phoneNumber;
public String getName() {
return name;
}
NotNull 和 NotEmpty区别:
NotNull:验证注解的元素值不为 null
NotEmpty:验证注解的元素值不为 null 且不为空(字符串长度不为 0、集合大小不为 0)
3.修改Controller
public class MyController { // 数据验证
//由于这里使用的 验证器为 Bean 对象验证器,所以对于要验证的参数数据,需是一个Bean 类型,使用 @Validated 标记这是要检验的 Bean
//注: 不能将 @Validated 注解在String类型与基本类型的形参前
// 通过 BindingResult 形参 可以获取到所有验证异常信息 (message 里面的)
@RequestMapping(value = "/validator.do")
public ModelAndView register(@Validated Person person,BindingResult br) {
ModelAndView mv = new ModelAndView();
//获取到所有的异常信息,如果没有异常,List也不会 为 null,而是 size = 0;
List<ObjectError> errors = br.getAllErrors();
System.out.println(errors.size());
//如果存在验证异常
if(errors.size()>0) {
//获取指定属性的异常信息
FieldError nameError = br.getFieldError("name");
FieldError scoreError = br.getFieldError("score");
FieldError phoneNumberError = br.getFieldError("phoneNumber"); //哪个FileError 不为空(即该属性不符合验证条件),则将对应的错误信息存入ModelAndView
if(nameError != null) { //如果不满足多个验证条件,如:不填 同时不满足 (1、不为空,2、3-6字符,)错误信息好像随机选一个的
mv.addObject("nameError", nameError.getDefaultMessage());
}
if(scoreError != null) {
mv.addObject("scoreError", scoreError.getDefaultMessage());
}
if(phoneNumberError != null) {
mv.addObject("phoneNumberError", phoneNumberError.getDefaultMessage());
}
mv.setViewName("/index.jsp");
return mv;
}
mv.addObject("person", person);
mv.setViewName("/WEB-INF/jsp/hello.jsp");
return mv; } }
BindingResult 接口中常用的方法有:
getAllErrors():获取到所有的异常信息。其返回值为List,若没有发生异常,则该List也被创建,
只不过其size()为0,而非List为null
getFieldError():获取指定属性的异常信息
getErrorCount(): 获取所有异常的数量
getRawFieldValue():获取到用户输入的引发验证异常的原始值
4.页面显示异常信息
<form action="${pageContext.request.contextPath }/test/validator.do" method="post">
name :<input name="name" type="text"/> ${nameError }<br/>
score : <input name="score" type="text"/>${scoreError }<br/>
phoneNumber: <input name="phoneNumber" type="text"/>${phoneNumberError }<br/>
<input type="submit" value="提交"/>
</form>
15.SpringMVC核心技术-数据验证的更多相关文章
- SpringMVC学习笔记七:SpringMVC的数据验证
SpringMVC支持JSR(Java Specification Requests, Java规范提案)303-Bean Validation数据验证规范,该规范的实现者很多,其中较常用的是 Hib ...
- SpringMVC配置数据验证(JSR-303)
这篇文章已经过时了. 请参考比较合适的前后端交互方式. 1.pom.xml中追加hibernate-validator 2.在dto类的域上追加JSR-303的注解 public class Data ...
- springmvc 整合数据验证框架 jsr
1.maven <dependency> <groupId>javax.validation</groupId> <artifactId>validat ...
- springMVC数据验证出现404错误解决办法
今天使用springMVC的数据验证的时候,看似很简单的东西,却有一个很大的陷阱:提交空表单的时候总是出现404错误,但是后台却不给你报任何错.遇到这个错误这个很苦恼,搞了几小时,今天记录并分享一下解 ...
- SpringMVC数据验证
SpringMVC数据验证——第七章 注解式控制器的数据验证.类型转换及格式化——跟着开涛学SpringMVC 资源来自:http://jinnianshilongnian.iteye.com/blo ...
- SpringMVC数据验证(AOP处理Errors和方法验证)
什么是JSR303? JSR 303 – Bean Validation 是一个数据验证的规范,2009 年 11 月确定最终方案. Hibernate Validator 是 Bean Valida ...
- springmvc 数据验证 hibernate-validator --->对象验证
数据验证步骤: 1.测试环境的搭建: 2.验证器的注册 在springmvc.xml配置文件中加以下代码: 3.验证注解添加到对应实体类上 4.修改处理器 5.将验证失败信息写入到表单 index.j ...
- SpringMVC使用@Valid注解进行数据验证
SpringMVC使用@Valid注解进行数据验证 from:https://blog.csdn.net/zknxx/article/details/52426771 我们在做Form表单提交的时 ...
- SpringMVC(6)数据验证
在系列SpringMVC(4)数据绑定-1.SpringMVC(5)数据绑定-2中我们展示了如何绑定数据,绑定完数据之后如何确保我们得到的数据的正确性?这就是我们本篇要说的内容 -> 数据验证. ...
随机推荐
- Qt编写自定义控件22-蚂蚁线
一.前言 关于蚂蚁线控件,相信很多用过PS的人都知道,在选中某个区域以后,边上的线条会有一种动态流动的效果,这种效果就叫做蚂蚁线,百科的解释是:动物的一种本能现象,领头的蚂蚁以随机的路线走向食物或洞穴 ...
- jmeter测试报告套路
各位: 以下是本周第一次双师压测结果,后续优化后会更新优化结果. 配置: 压测环境: staging压测服务器配置4核16G,数据库4核8G 线上环境: 服务器配置16核24G,数据库主库 ...
- 【UE】常用的UltraEdit使用技巧
Tip 1: Alt+C 列模式可以说最初选择使用这个文本编辑软件,原因很简单,就是因为“她”具有列编辑模式.如果您还不知道什么是列编辑模式的话,我想您应该好好研究一下啦.这是一个超级“赞”的功能.在 ...
- AutoHome项目的学习
1.自定义UITabBar #import <UIKit/UIKit.h> @interface XHQTabBarViewController : UITabBarController ...
- Navicat连接MySQL 8出现2059 - authentication plugin 'caching_sha2_password'的解决办法
进入MySQL控制台,执行如下命令: use mysql; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY ...
- EasyUI datagrid列隐藏与显示
隐藏DataGrid某一列 $("#datagrid_view").datagrid('hideColumn', filed); 2. 显示DataGrid隐藏的某一列 $(&qu ...
- Flutter Swiper制作轮播效果
1.引入flutter_swiper插件 flutter最强大的siwiper, 多种布局方式,无限轮播,Android和IOS双端适配. Flutter_swiper的GitHub地址:https: ...
- ES6 javascript 实用开发方法技巧分享
定义变量/常量 ES6 中新增加了 let 和 const 两个命令,let 用于定义变量,const 用于定义常量 两个命令与原有的 var 命令所不同的地方在于,let, const 都是块级作用 ...
- mysql学习笔记11_18(更新、插入和删除)
1.初始表 mysql> select * from department; 2.修改销售部的地点为杭州 mysql> update department set address = '杭 ...
- 集群架构01.Nginx初步安装配置
1.切换163yum 源,环境介绍 [root@moban ~]# cat /etc/redhat-release CentOS release 6.5 (Final) mv CentOS-Base. ...