SpringMVC学习(三)———— springmvc的数据校验的实现
一、什么是数据校验?
这个比较好理解,就是用来验证客户输入的数据是否合法,比如客户登录时,用户名不能为空,或者不能超出指定长度等要求,这就叫做数据校验。
数据校验分为客户端校验和服务端校验
客户端校验:js校验
服务端校验:springmvc使用validation校验,struts2使用validation校验。都有自己的一套校验规则。
二、springmvc的validation校验
Springmvc本身没有校验功能,它使用hibernate的校验框架,hibernate的校验框架和orm没有关系
2.1、添加jar包

2.2、在springmvc.xml中配置validator校验器,基本上直接复制拿过去用即可。
配置以下这些,相当于有人帮我们写好了校验代码,我们拿过来直接用就行了,所以需要进行配置。

将validator注册到适配器中
方式一(推荐)
方式二:如果配置文件中使用的是非注解方式编写的适配器,则这样配置

<!-- 校验器,配置validator -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
<property name="validationMessageSource" ref="validationMessageSource"></property>
</bean> <!-- 配置validationMessageSource -->
<bean id="validationMessageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!-- 指定校验信息的资源文件的基本文件名称,不包括后缀,后缀默认是properties -->
<property name="basenames">
<list>
<value>classpath:validationMessageSource</value>
</list>
</property>
<!-- 指定文件的编码 -->
<property name="fileEncodings" value="utf8"></property>
<!-- 对资源文件内容缓存的时间,单位秒 -->
<property name="cacheSeconds" value="120"></property>
</bean>

<!-- 校验器,配置validator -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
<property name="validationMessageSource" ref="validationMessageSource"></property>
</bean> <!-- 配置validationMessageSource -->
<bean id="validationMessageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!-- 指定校验信息的资源文件的基本文件名称,不包括后缀,后缀默认是properties -->
<property name="basenames">
<list>
<value>classpath:validationMessageSource</value>
</list>
</property>
<!-- 指定文件的编码 -->
<property name="fileEncodings" value="utf8"></property>
<!-- 对资源文件内容缓存的时间,单位秒 -->
<property name="cacheSeconds" value="120"></property>
</bean>

2.3、validationMessageSource.properties
该配置文件的作用就是存储校验失败时的提示文字信息的,也就是相当于将其提取出来放到配置文件中,

2.4、在pojo中指定校验规则
列举两个校验规则(使用的是注解校验),notnull和size

1、items.name.size和items.createtime.notnull:就是读取validationMessageSource.properties中的配置信息。从这里就可以理解该配置文件的意义,防止硬编码。
2、使用注解对需要进行校验的属性进行绑定,而能够使这些注解生效的前提就是配置此前的几个步骤,2.1、2.2、2.3都必不可少
其他校验规则摘抄自网上


2.5、controller中对其校验绑定进行使用

1、@Validated作用就是将pojo内的注解数据校验规则(@NotNull等)生效,如果没有该注解的声明,pojo内有注解数据校验规则也不会生效
2、BindingResult对象用来获取校验失败的信息(@NotNull中的message),与@Validated注解必须配对使用,一前一后
3、代码中的逻辑应该很容易看懂,就是将result中所有的错误信息取出来,然后到原先的页面将错误信息进行显示,注意,要使用model对象,则需要在形参中声明Model model,然后菜能使用
2.6、jsp页面

2.7、总结
其实非常简单,直接使用注解对其进行校验就完事了,校验代码都替我们写好了,只需要配置一下即可。傻瓜式操作。不会的看上面步骤,一步步来。
三、分组校验
3.1、什么是分组校验?
校验规则是在pojo 制定的,而同一个pojo可以被多个Controller使用,此时会有问题,即:不同的Controller方法对同一个pojo进行校验,此时这些校验信息是共享在这不同的Controller方法 中,但是实际上每个Controller方法可能需要不同的校验,在这种情况下,就需要使用分组校验来解决这种问题,
通俗的讲,一个pojo中有很多属性,controller中的方法1可能只需要校验pojo中的属性1,controller中的方法2只需要校验pojo中的属性2,但是pojo中的校验注解有很多,怎样才能使方法1只校 验属性1,方法二只校验属性2呢?就需要用分组校验来解决了。
3.2、定义分组


就是定义空的接口,接口类只作为这个分组标识来使用,看下面的用法,就知道其意义何在了
3.3、使用分组

3.4、controller方法
在这个方法中,那么就只会校验items这个pojo中有ValidationGroup1这个分组的校验注解,而不会在校验其他的

四、总结
数据校验就这样讲完了,非常简单吧,拿过来就是一顿用即可。
SpringMVC学习(三)———— springmvc的数据校验的实现的更多相关文章
- (转)SpringMVC学习(三)——SpringMVC的配置文件
http://blog.csdn.net/yerenyuan_pku/article/details/72231527 读者阅读过SpringMVC学习(一)——SpringMVC介绍与入门这篇文章后 ...
- springmvc学习笔记(18)-json数据交互
springmvc学习笔记(18)-json数据交互 标签: springmvc springmvc学习笔记18-json数据交互 springmvc进行json交互 环境准备 加入json转换的依赖 ...
- (转)SpringMVC学习(一)——SpringMVC介绍与入门
http://blog.csdn.net/yerenyuan_pku/article/details/72231272 SpringMVC介绍 SpringMVC是什么? SpringMVC和Stru ...
- (转)SpringMVC学习(六)——SpringMVC高级参数绑定与@RequestMapping注解
http://blog.csdn.net/yerenyuan_pku/article/details/72511749 高级参数绑定 现在进入SpringMVC高级参数绑定的学习,本文所有案例代码的编 ...
- SpringMVC——类型转换和格式化、数据校验、客户端显示错误消息
在介绍类型转换和格式化之前,我首先来介绍 <mvc:annotation-driven />. 需要导入的 schema: xmlns:mvc="http://www.sprin ...
- SpringMVC框架07——服务器端JSR303数据校验
1.数据校验概述 数据校验分为客户端校验和服务器端校验,客户端主要是通过过滤正常用户的误操作,是第一道防线,一般使用JavaScript代码实现.但是只有客户端校验是不够的,攻击者可以绕过客户端验证直 ...
- SpringMVC中的 JSR 303 数据校验框架说明
JSR 303 是java为Bean数据合法性校验提供的标准框架,它已经包含在JavaEE 6.0中. JSR 303 通过在Bean属性上标注类似于@NotNull.@Max等标准的注解指定校验规则 ...
- SpringMVC的拦截器和数据校验
SpringMVC拦截器 什么是拦截器:Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理.例如通过拦截器可以 ...
- (转)SpringMVC学习(五)——SpringMVC的参数绑定
http://blog.csdn.net/yerenyuan_pku/article/details/72511611 SpringMVC中的参数绑定还是蛮重要的,所以单独开一篇文章来讲解.本文所有案 ...
- springMVC学习(3)-springMVC和mybatis整合
一.需求:使用springmvc和mybatis完成商品列表查询. 二.整合思路:springMVC+mybaits的系统架构: 1步):整合dao层 mybatis和spring整合,通过sprin ...
随机推荐
- abaqus修改inp直接建立工程
前面已经知道,通过修改以下inp的节点和单元编号,就可以新建模型,可是对于大的工程来说,逐个选取单元进行添加材料以及确定哪步进行填土仍是比较麻烦的(如果工程网格划分好并告知哪些单元好属于哪些材料,哪些 ...
- BFS总结
能够用 BFS 解决的问题,一定不要用 DFS 去做! 因为用 Recursion 实现的 DFS 可能造成 StackOverflow! (NonRecursion 的 DFS 一来你不会写,二来面 ...
- Java中十六进制转换 Integer.toHexString()
为了显示一个byte型的单字节十六进制(两位十六进制表示)的编码,请使用: Integer.toHexString((byteVar & 0x000000FF) | 0xFFFFFF00).s ...
- freeType移植总结①——使用keil编译freeType2库
在各个技术博客搜索相关资料后,终于将freeType的源码用keil工程编译通过,这里记录一下步骤和遇到的问题. 因为网上的资料都是旧版本freeType的工程,这里博主使用的是freeType2.9 ...
- 第三次OO总结
规格化设计的调研 随着50年代高级语言的出现,编译技术不断完善,涌现出多种流派的语言,其中就有里程碑式的Pascal语言:进入70年代,由于众多语言造成的不可移植.难于维护,Ada程序设计语言诞生了, ...
- 防范 SQL 注入攻击
防范 SQL 注入攻击 我们执行的 SQL语句中包含变量,执行的时候会直接把变量内容替换进去.而如果攻击者在输入框中输入一些危险的字符(通常包含 SQL 注释符 --,以及其他预先精心设置的内容), ...
- <笔记>Apache+PHP+MYSQL配置
(1)Apache的the requested operation has failed错误: cmd—输入netstat –ano,可看到80端口已被进程占用,PID为4 打开任务管理器—〉查看—〉 ...
- 大众点评selfxss结合两个csrf变废为宝(已修复,故公开,不涉及真实参数)
大众点评selfxss结合两个csrf变废为宝 漏洞不值钱,但还是蛮好玩的 漏洞信息 类型:存储型xss 场景:收藏商户后,去已收藏的商户列表可以给指定商户添加tag(与下文html标签区别) 漏洞限 ...
- HTML5元素标记释义
HTML5元素标记释义 标记 类型 意义 介绍 文件标记 <html> ● 根文件标记 让浏览器知道这是HTML 文件 META标记 <head> ● 开头 提供文件整体信息 ...
- 【转载】关于.NET下开源及商业图像处理(PSD)组件
原创]关于.NET下开源及商业图像处理(PSD)组件 阅读目录 1 前言 2 .NET图像处理组件总结 3.相关资源网址 本博客所有文章分类的总目录:http://www.cnblo ...