SpringMVC教程--Validation校验
Validation校验
b/s系统中对http请求数据的校验多数在客户端进行,这也是出于简单及用户体验性上考虑,但是在一些安全性要求高的系统中服务端校验是不可缺少的,本节主要学习springmvc实现控制层添加校验。
Spring3支持JSR-303验证框架,JSR-303是JAVA EE 6中的一项子规范,叫做Bean Validation,官方参考实现是Hibernate Validator(与Hibernate ORM没有关系),JSR 303用于对Java Bean中的字段的值进行验证。
1.1 需求
对商品信息进行校验,是否必须,输入数据合法性。
1.2 加入jar包
1.3 配置validator
<!-- 校验错误信息配置文件 --><bean id="messageSource"class="org.springframework.context.support.ReloadableResourceBundleMessageSource"><property name="basenames"> <list> <value>classpath:CustomValidationMessages</value> </list> </property><property name="fileEncodings" value="utf-8" /><property name="cacheSeconds" value="120" /></bean><bean id="validator"class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"><property name="providerClass" value="org.hibernate.validator.HibernateValidator" /><!-- 如果不指定则默认使用classpath下的ValidationMessages.properties --><property name="validationMessageSource" ref="messageSource" /></bean>
1.4 将validator加到处理器适配器
配置方式1:
<!-- 自定义webBinder --><bean id="customBinder"class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"><property name="validator" ref="validator" /></bean>
<!-- 注解适配器 --><beanclass="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"><property name="webBindingInitializer" ref="customBinder"></property></bean>
配置方式2:
<mvc:annotation-driven validator="validator"> </mvc:annotation-driven>
1.5 添加验证规则
public class Items {private Integer id;@Size(min=1,max=30,message="{item.name.length.illigel}")private String name;@NotEmpty(message="{pic.is.null}")private String pic;
1.6 错误消息文件CustomValidationMessages
item.name.length.illigel=商品在名称在1到3个字符之间
pic.is.null=请上传图片
如果在eclipse中编辑properties文件无法看到中文则参考“Eclipse开发环境配置-indigo.docx”添加propedit插件。
1.7 捕获错误
修改Controller方法:
// 商品修改提交@RequestMapping("/editItemSubmit")public String editItemSubmit(@Validated @ModelAttribute("item") Items items,BindingResult result,@RequestParam("pictureFile") MultipartFile[] pictureFile,Model model)throws Exception {//如果存在校验错误则转到商品修改页面if (result.hasErrors()) {List<ObjectError> errors = result.getAllErrors();for(ObjectError objectError:errors){System.out.println(objectError.getCode());System.out.println(objectError.getDefaultMessage());}return "item/editItem";}
注意:添加@Validated表示在对items参数绑定时进行校验,校验信息写入BindingResult中,在要校验的pojo后边添加BingdingResult, 一个BindingResult对应一个pojo,且BingdingResult放在pojo的后边。
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
在需要显示错误信息地方:
<spring:hasBindErrors name="item"><c:forEach items="${errors.allErrors}" var="error">${error.defaultMessage }<br/></c:forEach></spring:hasBindErrors>
说明:
<spring:hasBindErrors name="item">表示如果item参数绑定校验错误下边显示错误信息。
1.8 分组校验
如果两处校验使用同一个Items类则可以设定校验分组。
定义分组:
分组就是一个标识,这里定义一个接口:
public interface ValidGroup1 {}public interface ValidGroup2 {}
指定分组校验:
public class Items {private Integer id;//这里指定分组ValidGroup1,此@Size校验只适用ValidGroup1校验@Size(min=1,max=30,message="{item.name.length.illigel}",groups={ValidGroup1.class})private String name;// 商品修改提交@RequestMapping("/editItemSubmit")public String editItemSubmit(@Validated(value={ValidGroup1.class}) @ModelAttribute("item") Items items,BindingResult result,@RequestParam("pictureFile") MultipartFile[] pictureFile,Model model)throws Exception {
在@Validated中添加value={ValidGroup1.class}表示商品修改使用了ValidGroup1分组校验规则,也可以指定多个分组中间用逗号分隔,
@Validated(value={ValidGroup1.class,ValidGroup2.class })
SpringMVC教程--Validation校验相关推荐
- springmvc(四) springmvc的数据校验的实现
so easy~ --WH 一.什么是数据校验? 这个比较好理解,就是用来验证客户输入的数据是否合法,比如客户登录时,用户名不能为空,或者不能超出指定长度等要求,这就叫做数据校验. 数据校验分为客户端 ...
- JAVAWEB开发之SpringMVC详解(二)——高级开发、数据回显、参数绑定集合、图片上传、json交互、validation校验、异常处理、RESTful支持、拦截器
知识回顾 springmvc框架 用户请求url到DispatcherServlet前端控制器,相当于中央调度器,降低系统各组件之间的耦合度. DispatcherServlet前端控制器通过Hand ...
- springmvc教程(4)
springmvc教程系列 springmvc史上最好教程(2) springmvc史上最好教程(1) springmvc史上最好教程(3) 2注解开发-高级 2.1上传图片 2.1.1配置虚拟目录 ...
- Silverlight实例教程 - Validation数据验证开篇
Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...
- Spring Validation 校验
一.概述 在 Web 应用中,客户端提交数据之前都会进行数据的校验,比如用户注册时填写的邮箱地址是否符合规范.用户名长度的限制等等,不过这并不意味着服务端的代码可以免去数据验证的工作,用户也可能使用 ...
- Spring Validation校验
本文来说下现在使用的比较多的Spring Validation校验框架. 文章目录 概述 校验注解 JSR-303包含的注解 Hibernate Validator扩展的注解 简单使用 引入依赖 re ...
- SpringMVC的数据校验
Springmvc-Validate(数据校验) 数据校验概述 1.项目中,通常使用较多是前端的校验,比如页面中js校验.对于安全要求较高点建议在服务端进行校验. 2服务端校验: -控制层contro ...
- spring全局异常抓取validation校验信息
spring全局异常抓取validation校验信息 参考文章: (1)spring全局异常抓取validation校验信息 (2)https://www.cnblogs.com/jianxiaopo ...
- springmvc教程--注解开发基础详解
springmvc教程系列 springmvc史上最好教程(2) springmvc史上最好教程(1) 一. 注解开发-基础 1.1 需求 使用springmvc+mybatis架构实现商品信息维护. ...
最新文章
- 【GANs入门】pytorch-GANs任务迁移-单个目标(数字的生成)
- leetcode 【 Unique Paths 】python 实现
- 对口高考计算机vf试题,计算机对口升学模拟答案.doc
- 如何用python制作动画的软件_大牛Python程序员制作3D动态可视化教程
- linux 看防火墙的启停日志,LINUX下防火墙iptables的日志管理
- 10分钟搭建MySQL Binlog分析+可视化方案
- 格力宣布11月11日一天让利7亿元 全场空调最高降3900元
- Java 这一年:IntelliJ 称霸 IDE,Kotlin 成最大赢家!
- h5 如何录音保存上传_H5录音及保存到后台recorder.js实现
- 有点累了?不如看看兵法三十六计。
- 如何进行大数据入门的学习
- ERROR: Failed to resolve: org.jetbrains.kotlin:kotlin-stdlib-jre7:1.3.10
- mac 重启后提示 路径/System/installation/Packages/OSinstall.mpkg 似乎已缺失或已损坏,的解决方法
- 矩阵转置,矩阵加,矩阵乘Java
- PTA-今天是本学期的第几周的第几天?
- flutter 文字渐变和文字添加边框
- 李智慧 - 架构师训练营总览
- 解决方法:CC2640R2F从7x7改成5x5封装,主机连接失败
- 2022 CCF中国软件大会(CCF Chinasoft)“软件智能合成理论与方法”论坛成功召开...
- 「今日 GitHub 趋势」让全世界程序员体会中国的 12306 抢票狂潮