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中我们展示了如何绑定数据,绑定完数据之后如何确保我们得到的数据的正确性?这就是我们本篇要说的内容 -> 数据验证. ...
随机推荐
- Oracle11g安装与卸载教程
1.1,前言: 电脑太卡,鄙人穷屌丝啊,没钱买新电脑,想想周六日还要耍游戏就给电脑重做了个系统,糟糕的是电脑上的各种环境,工具都需要重新装一边,包括oracle数据库- -,依稀记得昨天装了一上午的数 ...
- Swagger下载的zip文件无法打开,而且大小比直接下载的要大
以前写的一个rest提供的是浏览器下载zip包的功能,前端界面调用rest可以正常地下载. 今天使用Swagger来调试下载功能时,发现下载的zip包打不开,而且大小也比直接在浏览器中输入rest地址 ...
- Delphi10.2安装过程详解
下载好的Delphi10.2是iso镜像,使用虚拟光驱,快速装载后,提示安装 运行setup.exe安装程序,选择安装语言——点击OK,最好关闭网络和退出其他软件 勾选同意条款,点击next ...
- Ubuntu安装teamview客户端
1,下载teamviem客户端的Ubuntu版本 下载地址 https://www.teamviewer.com/en/download/linux/ 2,安装 apt install ./teamv ...
- iOS——sqlite3的使用(iOS嵌入式关系数据库)
1>添加sqlite3动态库:libsqlite3.dylib,CoreGraphics.framework,UIKit.framework,Foundation.framework 2> ...
- HDU 1159 最长公共子序列
Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- golang web框架设计5:配置设计
配置信息的解析,实现的是一个key=value,键值对的一个配置文件,类似于ini的配置格式,然后解析这个文件,把解析的数据保存到map中,最后调用的时候通过几个string,int之类的函数返回相应 ...
- flask数据库连接池DBUtils
数据库连接池 为啥要使用数据库连接池 频繁的连接和断开数据库,消耗大,效率低 DBUtils可以创建多个线程连接数据库,且一直保持连接,不会断开 执行数据库操作时,由数据池分配线程,当数据池空时,可选 ...
- ulimt 和 sysctl
ulimit : 对进程进行 资源限制 ,如打开文件数,进程数. sysctl: 更改内核参数. /proc/pid : 伪文件系统,以文件系统的方式 对 访问内核参数 提供接口. 1. ulimit ...
- ORACLE-JDK非收费版本下载链接
这个链接下可以下载oracleJDK的所有版本 https://www.oracle.com/technetwork/java/javase/archive-139210.html 其中jdk192之 ...