校验的理解

项目中,通常使用较多是前端的校验,比如页面中js校验。对于安全要求较高点建议在服务端进行校验。

服务端校验:
控制层conroller:校验页面请求的参数的合法性。在服务端控制层conroller校验,不区分客户端类型(浏览器、手机客户端、远程调用)
业务层service(使用较多):主要校验关键业务参数,仅限于service接口中使用的参数。
持久层dao:一般是不校验的。

SpringMVC校验

SpringMVC校验属于控制层校验,使用的是hibernate校验框架validation(只是单纯的校验框架,与hibernate没有任何关系)。

校验思路:
页面提交请求的参数,请求到controller方法中,使用validation进行校验。如果校验出错,将错误信息展示到页面。
具体需求:
商品修改,添加校验(校验商品名称长度,生产日期的非空校验),如果校验出错,在商品修改页面显示错误信息。

校验的步骤:

第一步:环境准备

导入hibernate的校验框架validation所需要jar包:

第二步:配置校验器

在springmvc.xml文件中添加:

    <!-- 校验器 --><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><!-- 校验错误信息配置文件 --><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>

第三步:将校验器注入到处理器适配器中

配置方式1:
在springmvc.xml文件中添加以下内容中的红色方框中的属性:

配置方式2(自学):

<!-- 自定义webBinder --><bean id="customBinder"class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"><property name="validator" ref="validator" /></bean><!-- 注解适配器 --><bean
        class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"><property name="webBindingInitializer" ref="customBinder"></property></bean>

特别说明:

创建错误提示信息文件:

第四步:在pojo中添加校验规则

在ItemsCustom.java中添加校验规则:

配置错误信息提示文件中的错误提示信息:

校验的注解:
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
Hibernate Validator 附加的 constraint
@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内

第五步:捕获校验错误信息

如果需要pojo需要检验,在需要校验的pojo前边添加@Validated,在需要检验的pojo后边添加BindingResult bindingResult接收校验出错信息。
注意:@Validated和BindingResult bingingResult是配对出现的,并且形参顺序是固定的(一前一后)

在Controller的方法中添加如下内容:

第六步:在页面显示错误校验信息

1.在controller中将错误信息传到页面即可:

2.在jsp页面显示错误信息:
在editItems.jsp中添加如下内容:

分组校验

需求:
在pojo中定义校验规则,而pojo是被多个 controller所共用,当不同的controller方法对同一个pojo进行校验,但是每个controller方法需要不同的校验。

解决方法:
定义多个校验分组(其实是一个java接口),分组中定义有哪些规则
每个controller方法使用不同的校验分组

1.定义校验分组

分组就是一个标识,这里定义一个接口,接口里面啥也没有:

2.在校验规则中指定分组

在需要检验的pojo类中:

3.在controller方法中使用指定分组的校验

在controller方法中:

SpringMVC校验---SpringMVC学习笔记(八)相关推荐

  1. [Spring+SpringMVC+Mybatis]框架学习笔记(四):Spring实现AOP

    上一章:[Spring+SpringMVC+Mybatis]框架学习笔记(三):Spring实现JDBC 下一章:[Spring+SpringMVC+Mybatis]框架学习笔记(五):SpringA ...

  2. ReactJS学习笔记八:动画

    ReactJS学习笔记八:动画 分类: react学习笔记 javascript2015-07-06 20:27 321人阅读 评论(0) 收藏 举报 react动画 目录(?)[+] 这里只讨论Re ...

  3. 【opencv学习笔记八】创建TrackBar轨迹条

    createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...

  4. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...

  5. ROS学习笔记八:创建ROS msg和srv

    ROS学习笔记八:创建ROS msg和srv 本节主要讲述了如何创建和建立ROS msg和srv,同时使用命令行工具rosmsg.rossrv和roscp. msg和srv简介 msg:描述ROS m ...

  6. Halcon 学习笔记八:颜色识别

    Halcon 学习笔记八:颜色识别 一.图像处理需要的知识 二.图像处理的预处理和分割过程 二.颜色识别的方法 三.例子一 四.例子二 五.例子三 一.图像处理需要的知识 1.图像处理基础(rgb(h ...

  7. ZooKeeper学习笔记(八):ZooKeeper集群写数据原理

    写数据原理 写流程直接请求发送给Leader节点 这里假设集群中有三个zookeeper服务端 ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种 ...

  8. MongoDB 学习笔记八 复制、分片、备份与恢复、监控

    MongoDB 学习笔记八 复制.分片.备份与恢复.监控 MongoDB复制(副本集) 什么是复制? MongoDB 复制原理 MongoDB 副本集设置 副本集添加成员 MongoDB 分片 分片 ...

  9. python3第三方库手册_python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑...

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...

最新文章

  1. pythonturtle是标准库_Python中turtle库的使用
  2. Java算法面试题 一个顺子带一对
  3. 中国最难考的大学共有31所,分6大梯度,考上毕业很抢手
  4. windows不能改密码
  5. ISA Server 2006的全自动无人职守安装
  6. 笔试小结---线程、进程
  7. mysqlreport
  8. c++数据结构中 顺序队列的队首队尾_数据结构与算法(三)栈和队列
  9. 智慧小区智能物业管理系统综合解决方案
  10. 印度孵化器的红利期才刚到,但花样还真不少
  11. 旋转屏幕时数据的保存与恢复
  12. Android 11.0 12.0SystemUI修改状态栏电池图标样式为横屏显示
  13. 自监督学习(四)Joint Unsupervised Learning of Deep Representations and Image Clusters
  14. UnityShder法线贴图
  15. 时序分析 45 -- 时序数据转为空间数据 (四) 格拉姆角场 python 实践 (下)
  16. PCL法线计算及原理
  17. Matlab绘制多组柱状图的方法(可直接复制)
  18. 基于Excel的VDS记录数据文件查看及转换工具(转MDA格式)
  19. python读取二维数组的行列数_Python获取二维数组的行列数的2种方法
  20. php 评论插件,织梦评论插件,dedecms评论插件

热门文章

  1. Pattern Discovery and Anomaly Detection via Knowledge Graph-学习笔记
  2. 条件查询_SQL简单查询(条件查询 模糊查询)
  3. 三维重建16:概率图模型 模板类编程
  4. 构造函数也可以进行方法重载_防蛀方法不止涂氟、窝沟封闭,还有一种方法在家就可以进行。...
  5. python中关于turtle库的学习笔记
  6. JMeter的PUT请求,响应结果中文出现乱码的解决方法
  7. 从零开始netty学习笔记之BIO
  8. Servicehot:混合云泄露四大公有云的秘密
  9. 给初级拍摄者的十条好建议
  10. 课堂练习-买书价格最低