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校验相关推荐

  1. springmvc(四) springmvc的数据校验的实现

    so easy~ --WH 一.什么是数据校验? 这个比较好理解,就是用来验证客户输入的数据是否合法,比如客户登录时,用户名不能为空,或者不能超出指定长度等要求,这就叫做数据校验. 数据校验分为客户端 ...

  2. JAVAWEB开发之SpringMVC详解(二)——高级开发、数据回显、参数绑定集合、图片上传、json交互、validation校验、异常处理、RESTful支持、拦截器

    知识回顾 springmvc框架 用户请求url到DispatcherServlet前端控制器,相当于中央调度器,降低系统各组件之间的耦合度. DispatcherServlet前端控制器通过Hand ...

  3. springmvc教程(4)

    springmvc教程系列 springmvc史上最好教程(2) springmvc史上最好教程(1) springmvc史上最好教程(3) 2注解开发-高级 2.1上传图片 2.1.1配置虚拟目录 ...

  4. Silverlight实例教程 - Validation数据验证开篇

    Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...

  5. Spring Validation 校验

    一.概述 在 Web 应用中,客户端提交数据之前都会进行数据的校验,比如用户注册时填写的邮箱地址是否符合规范.用户名长度的限制等等,不过这并不意味着服务端的代码可以免去数据验证的工作,用户也可能使用 ...

  6. Spring Validation校验

    本文来说下现在使用的比较多的Spring Validation校验框架. 文章目录 概述 校验注解 JSR-303包含的注解 Hibernate Validator扩展的注解 简单使用 引入依赖 re ...

  7. SpringMVC的数据校验

    Springmvc-Validate(数据校验) 数据校验概述 1.项目中,通常使用较多是前端的校验,比如页面中js校验.对于安全要求较高点建议在服务端进行校验. 2服务端校验: -控制层contro ...

  8. spring全局异常抓取validation校验信息

    spring全局异常抓取validation校验信息 参考文章: (1)spring全局异常抓取validation校验信息 (2)https://www.cnblogs.com/jianxiaopo ...

  9. springmvc教程--注解开发基础详解

    springmvc教程系列 springmvc史上最好教程(2) springmvc史上最好教程(1) 一. 注解开发-基础 1.1 需求 使用springmvc+mybatis架构实现商品信息维护. ...

最新文章

  1. 【GANs入门】pytorch-GANs任务迁移-单个目标(数字的生成)
  2. leetcode 【 Unique Paths 】python 实现
  3. 对口高考计算机vf试题,计算机对口升学模拟答案.doc
  4. 如何用python制作动画的软件_大牛Python程序员制作3D动态可视化教程
  5. linux 看防火墙的启停日志,LINUX下防火墙iptables的日志管理
  6. 10分钟搭建MySQL Binlog分析+可视化方案
  7. 格力宣布11月11日一天让利7亿元 全场空调最高降3900元
  8. Java 这一年:IntelliJ 称霸 IDE,Kotlin 成最大赢家!
  9. h5 如何录音保存上传_H5录音及保存到后台recorder.js实现
  10. 有点累了?不如看看兵法三十六计。
  11. 如何进行大数据入门的学习
  12. ERROR: Failed to resolve: org.jetbrains.kotlin:kotlin-stdlib-jre7:1.3.10
  13. mac 重启后提示 路径/System/installation/Packages/OSinstall.mpkg 似乎已缺失或已损坏,的解决方法
  14. 矩阵转置,矩阵加,矩阵乘Java
  15. PTA-今天是本学期的第几周的第几天?
  16. flutter 文字渐变和文字添加边框
  17. 李智慧 - 架构师训练营总览
  18. 解决方法:CC2640R2F从7x7改成5x5封装,主机连接失败
  19. 2022 CCF中国软件大会(CCF Chinasoft)“软件智能合成理论与方法”论坛成功召开...
  20. 「今日 GitHub 趋势」让全世界程序员体会中国的 12306 抢票狂潮

热门文章

  1. NRF52832编译micro-ecc是指编译器路径
  2. Boost Asio总结(5)class tcp
  3. 区块链BaaS云服务(21)腾讯CCGP ”跨链协议 AMDP“
  4. 美国大学生数学建模竞赛赛题特点
  5. python_函数相关的各种参数定义和传递
  6. create_softLink.sh
  7. 01-Introducing the Arm architecture
  8. [思考]-32位的应用程序和64位的应用程序有什么区别
  9. optee的error codes
  10. SQL注入手工注入常用的语句