springmvc-validation效验器的使用介绍

  对于任何一个应用来说,都会做数据的有效性效验,但是只在前端做并不是很安全,考虑到安全性這个时候会要求我们在服务端也对数据进行有效验证,springmvc自身对数据在服务端有一个比较好的支持,springmvc能将我们前台提交的数据按照我们事先定下的规则,进行效验判断,对于不合格的数据信息,springmvc会把他保存到一个BindingResult 的类里面,这里面存放是错误集合,从而言之就可以把这些错误信息输出到jsp页面。

使用validation接口进行验证:

    在我们注解驱动中注入validation 效验器<mvc:annotation-driven conversion-service="conversionService" validator="validator"/>

所需依赖的jar包:

   

springmvc配置参考:

  这里我们指定了资源文件,以及一些常用配置,往后错误消息配置到CustomValidationMessage.properties 中以key value 形式读取

  <!--hibernate-validator 效验器
org.springframework.validation.beanvalidation.LocalValidatorFactoryBean 這个是spring-context 提供的效验的接口
-->
<bean id = "validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<!-- hibernate的效验器 -->
<property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
<!-- 加载资源文件,在指定文件中配置错误信息如果不加载默认会去找classpath下的ValidationMessage.properties -->
<property name="validationMessageSource" ref ="messageSource"></property>
</bean>
<bean id = "messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<!-- 加载资源文件名
basenames:不用加properties
-->
<property name="basenames">
<list>
<value>classpath:CustomValidationMessage</value>
</list>
</property>
<!-- 资源文件的编码格式 -->
<property name="defaultEncoding" value="UTF-8"/>
<!-- 加载超时 秒 重新加载-->
<property name="cacheSeconds" value=""/>
</bean>

我们实体类pojo 的参考:

     //效验名称在1 到 10 字符之间 不建议在里面直接写message 建议写在配置文件里面以国际化方式去读取错误信息
@Size(min=2,max=10,message="{items.name.length.error}")
@NotNull(message="{items.name.isNull}")
private String name;
//非空的效验
@NotNull(message="{items.createtime.isNull}")
private Date createtime; @NotNull(message="{items.detail.isNull}")
private String detail;

controller代码参考:

  在你需要效验的pojo前面添加@Validated 表示这是需要效验,在pojo 后面添加BindingResult 来接受它效验的错误信息

  注意:@Validated 和BindingResult 是配对出现,一前一后方式,这本案例中只是简单实现了這个功能,但并不是完整的。

 /**
* 商品信息提交的方法
* @return 重定向的使用
* @throws Exception
* @Validated: 注解效验器
* BindingResult:接受错误信息 */
@RequestMapping("/editItemsSubmit")
public String editItemsSubmit(Model model, Integer id,@Validated ItemsCustom itemsCustom ,BindingResult bindingResult)throws Exception{
if (bindingResult.hasErrors()) {
List<ObjectError> itemsErrorList = bindingResult.getAllErrors();
for(ObjectError objectError:itemsErrorList){
System.out.println(objectError.getDefaultMessage());
}
model.addAttribute("itemsErrorList", itemsErrorList);
return "items/editItems";
}
// 调用service 里面的接口方法
itemsService.updateItems(id, itemsCustom);
// 使用重定向到
// queryitems.do return "redirect:queryItems.do";
//使用forward 可以在其他页面获取值 对象等
//return "forward:queryItems.do";
return "success";
}

页面参JSP考代码:

  测试代码打印出错误消息

     <c:if test="${itemsErrorList != null }">
<c:forEach items="${itemsErrorList }" var="error" varStatus="index">
${error.defaultMessage}
</c:forEach>
</c:if>

在资源文件中配置错误信息CustomValidationMessage.properties:

 # 配置效验器的错误信息,key value 形式
# items 的错误配置
3 items.name.length.error=请输入2到10个字符的商品名称!
4 items.name.isNull=商品名称不能为空!
5 items.createtime.isNull=请输入商品的生产日期!
6 items.detail.isNull=商品描述不能为空!

Validation 效验常用限制注解:

  @Null:限制只能为null

  @NotNull:限制必须不能为空

  @AssertFalse 限制必须为false

  @AssertTrue 限制必须为true

  @DecimalMax(value) 限制必须为一个不大于指定值得数字

  @DecimalMax(value)限制必须为一个不小于指定值得数字

  @Digits(integer,fraction)限制必须为一个小数,且整数部分的位数不能超过integer,小数部分不能超过fraction

  @Futrue 限制必须为一个将来的日期

  @Max(value) 限制必须为一个不大于指定值得数字

  @Min(value)限制必须为一个不小于指定值得数字

  @Past限制必须为一个过去的时间

  @Pattern(value)限制为符合指定的正则表达式

  @Size(max,min)限制字符长度在min 到 max 之间

Springmvc_validation 效验器的更多相关文章

  1. Struts2:效验器——注解

    效验器三类: 编程式——Java代码 声明式——xml 注释法——@ 注解验证可以修饰属性的getter方法,也可以修饰执行方法Action中校验失败时,返回input逻辑视图 struts.xml ...

  2. Struts2:效验器——声明式

    就是用xml配置的方式,而不是Java代码的形式,那个是“编程式” Action: package org.ah.s2; import com.opensymphony.xwork2.ActionSu ...

  3. SpringMVC效验器

    效验器: 1. 效验器依赖 <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator --> &l ...

  4. MVC效验器

    步骤一:导入依赖 <!--数据效验--> <dependency> <groupId>org.hibernate</groupId> <artif ...

  5. 自研后端HTTP请求参数验证器服务ParamertValidateService

    好处:方便了后端对HTTP请求中参数进行核验,只需一次编写效验器,一行代码便可对所有参数的pojo进行参数核验!而且更改效验逻辑时只需要更改效验器类即可,实现了解耦合. 只需要程序员按照规范开发一个P ...

  6. Struts 2.0全面分析

    Struts 2.0 struts 1---前端控制+应用控制+命令模式 webwork ---控制器+拦截器+代理 Struts 2.0 继承了WebWork的设计理念,并没有继承struts 1, ...

  7. 201521123074 《Java程序设计》第1周学习总结

    1. 本章学习总结第一周学习总结: 学习了java语言的历史与发展,运行过程,安装了eclipse编程平台,试着编写了java程序. 2. 书面作业: Q 1.为什么java程序可以跨平台运行?执行j ...

  8. SpringMVC之编程式校验

    1.编程式效验需要实现Validator接口,针对模型类进行校验2.jar包 3.项目测试结构 4.StudentModel.java(模型类) package com.wt.entity; publ ...

  9. SpringMVC使用Hibernate-validator验证出现的错误

    缺少jar包 SpringMVC可以使用Hibernate-validator作为效验的实现,需要的jar包: hibernate-validator.jar validation-api.jar j ...

随机推荐

  1. Openresty使用Thrift安装步骤

    最新想用Golang与Openresty相互通讯调用,使用RPC协议来实现,后来研究最终选择了Thrift:主要还是FB实现了支持Lua和Go模块,直接编译就可以成功嵌套使用,非常方便:研究了两天最后 ...

  2. 48. leetcode 105题 由树的前序序列和中序序列构建树结构

    leetcode 105题,由树的前序序列和中序序列构建树结构.详细解答参考<剑指offer>page56. 先序遍历结果的第一个节点为根节点,在中序遍历结果中找到根节点的位置.然后就可以 ...

  3. jQuery制作淘宝商城商品列表多条件查询功能

    一.介绍 这几天做网站的时候,突然用到这个功能,找了好久也没有找到.看到"希伟素材网"有这么一个JS,效果很不错,也正是我一直以来想要的结果.附图如下: 二:使用教程      1 ...

  4. ubuntu下安装opencv库+Python2.7环境安装及开发摄像头拍照应用

    好久没有更新了,今天更一篇最近遇到的问题,及解决办法,后面博客得继续写起来 安装 #使用Python下的lib库直接进行安装 apt-get install python-opencv 测试 #使用如 ...

  5. ### 七种SQL JOINS

    七种SQL JOINS 1.SELECT FROM TABLEA A LEFT JOIN TABLEB B ON A.Key=B.Key 2.SELECT FROM TABLEA A RIGHT JO ...

  6. RabbitMQ安装以及java使用(二)

    上一篇记录了rabbitmq的安装,这一篇记录一下rabbitmq的java客户端的简单使用,当然在项目中我们有更为复杂的应用场景,这里只有最简单的点对点生产者与消费者模式. 1.建立工程 首先建立一 ...

  7. Mysql事务处理详细讲解及完整实例下载

    一.Mysql事务概念 MySQL 事务主要用于处理操作量大,复杂度高的数据.由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行.在 MySQL 中只有使用了 Inn ...

  8. pwnable.kr memcpy之write up

    // compiled with : gcc -o memcpy memcpy.c -m32 -lm #include <stdio.h> #include <string.h> ...

  9. Linux误删C基本运行库libc.so.6处理方法

    1. libc.so.6介绍/usr/lib/libc.so.6是glibc的软链接,不同的平台可能路径会不一样.使用命令查看会看到: [root@farmer:~]$ls -l /lib/libc. ...

  10. 编译器报错:'IHTMLControlElement' : redefinition

    由于我安装了platform SDK,编译导致错误: error C2367: 'IHTMLControlElement' : redefinition; different uuid specifi ...