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中我们展示了如何绑定数据,绑定完数据之后如何确保我们得到的数据的正确性?这就是我们本篇要说的内容 -> 数据验证. ...
随机推荐
- 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_6.RabbitMQ研究-入门程序-消费者
我们在consumer这个功能下进行代码的编写 首先是新建这个层级的包 创建入门程序的消费者 消费者也需要和mq建立通道.建立连接创建通道 在顶部都声明这个队列 下面写核心代码监听队列.basicCo ...
- spring boot入门学习---1
1.maven配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...
- ffprobe读取音视频元数据信息,json格式输出
命令格式: ffprobe -v quiet -show_format -show_streams -print_format json F:\temp\test1566606924822.wav 输 ...
- OpenLDAP管理命令详解
一.OpenLDAP命令汇总 ldapsearch:搜索 OpenLDAP 目录树条目. ldapadd:通过 LDIF 格式,添加目录树条目. ldapdelete:删除 OpenLDAP 目录树条 ...
- java、python、golang等开发语言如何快速生成二维码?
免费二维码生成途径非常多!比如比较有名的草料二维码,如果只是简单的使用,用它就足够了.但是如果想大规模的生成,那就不太合适了.再者很多工具都没办法在二维码中加入logo(像微信二维码一样). 接下来, ...
- 【Qt开发】【ARM-Linux开发】 QT在ARM上显示字体的问题
在PC机上利用QT开发的应用程序在设置字体时,在PC上运行,可根据自己的设置,字体随之变大或变小.而移植到ARM上运行时发现,显示字体与所设置的字体不用,字体普遍偏小.经过上网搜索发现,是环境变量字库 ...
- K8s架构详解
每个微服务通过 Docker 进行发布,随着业务的发展,系统中遍布着各种各样的容器.于是,容器的资源调度,部署运行,扩容缩容就是我们要面临的问题. 基于 Kubernetes 作为容器集群的管理平台被 ...
- Linux下安装xrdp
ubuntu 打开终端,依次输入如下命令: sudo apt-get install xrdp sudo apt-get install vnc4server tightvncserver cd /h ...
- 阿里云ECS服务器 java JDK安装和配置 mysql安装和配置
最近配置了一下阿里云ecs服务的服务器环境,主要对java jdk环境的安装和配置,以及数据库mysql的安装和配置,趁着热乎,记录一下! 服务器用的系统是ubuntu_16_04_64的,版本16. ...
- 一个自己稍作修改了的美赛论文 LaTeX 模板
警告:这是旧版模板的发布页面.本站已经发布了最新版的美赛模板 easymcm(2020 年美赛可用),请到该页面查看: https://www.cnblogs.com/xjtu-blacksmith/ ...