Spring Validation(使用Hibernate Validator)
1、需要的jar包
hibernate-validator.5.1.3.Final.jar
validation-api.1.1.0.Final.jar
2、springsevlet-config.xml配置
在spring3之后,任何支持JSR303的validator(如Hibernate Validator)都可以通过简单配置引入,只需要在配置xml中加入,这时validatemessage的属性文件默认为classpath下的ValidationMessages.properties:
<!-- support JSR303 annotation if JSR 303 validation present on classpath --> <mvc:annotation-driven />
如果不使用默认,可以使用下面配置:
![](/assets/blank.gif)
<mvc:annotation-driven validator="validator" /><bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"><property name="providerClass" value="org.hibernate.validator.HibernateValidator"/><!--不设置则默认为classpath下的ValidationMessages.properties --><property name="validationMessageSource" ref="validatemessageSource"/> </bean><bean id="validatemessageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basename" value="classpath:validatemessages"/> <property name="fileEncodings" value="utf-8"/> <property name="cacheSeconds" value="120"/> </bean>
![](/assets/blank.gif)
3、hibernate validator constraint 注解
![](/assets/blank.gif)
Bean Validation 中内置的 constraint @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=) 被注释的元素必须在合适的范围内
![](/assets/blank.gif)
4、使用validator
在需要校验的对象前增加@Valid 注解(该注解位于javax.validation包中)来触发校验。这样就可以完成针对输入数据User对象的校验了,校验结果任然保存在BindingResult对象中。
![](/assets/blank.gif)
1 package com.mkyong.common.model; 2 3 import org.hibernate.validator.constraints.NotEmpty; 4 import org.hibernate.validator.constraints.Range; 5 6 public class Customer { 7 8 @NotEmpty //make sure name is not empty 9 String name; 10 11 @Range(min = 1, max = 150) //age need between 1 and 150 12 int age; 13 14 //getter and setter methods 15 16 }
![](/assets/blank.gif)
![](/assets/blank.gif)
1 package com.mkyong.common.controller; 2 3 import javax.validation.Valid; 4 import org.springframework.stereotype.Controller; 5 import org.springframework.ui.ModelMap; 6 import org.springframework.validation.BindingResult; 7 import org.springframework.web.bind.annotation.RequestMapping; 8 import org.springframework.web.bind.annotation.RequestMethod; 9 import com.mkyong.common.model.Customer; 10 11 @Controller 12 @RequestMapping("/customer") 13 public class SignUpController { 14 15 @RequestMapping(value = "/signup", method = RequestMethod.POST) 16 public String addCustomer(@Valid Customer customer, BindingResult result) { 17 18 if (result.hasErrors()) { 19 return "SignUpForm"; 20 } else { 21 return "Done"; 22 } 23 24 } 25 26 @RequestMapping(method = RequestMethod.GET) 27 public String displayCustomerForm(ModelMap model) { 28 29 model.addAttribute("customer", new Customer()); 30 return "SignUpForm"; 31 32 } 33 34 }
![](/assets/blank.gif)
![](/assets/blank.gif)
1 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 2 <html> 3 <head> 4 <style> 5 .error { 6 color: #ff0000; 7 } 8 9 .errorblock { 10 color: #000; 11 background-color: #ffEEEE; 12 border: 3px solid #ff0000; 13 padding: 8px; 14 margin: 16px; 15 } 16 </style> 17 </head> 18 19 <body> 20 <h2>Customer SignUp Form - JSR303 @Valid example</h2> 21 22 <form:form method="POST" commandName="customer" action="customer/signup"> 23 <form:errors path="*" cssClass="errorblock" element="div" /> 24 <table> 25 <tr> 26 <td>Customer Name :</td> 27 <td><form:input path="name" /></td> 28 <td><form:errors path="name" cssClass="error" /></td> 29 </tr> 30 <tr> 31 <td>Customer Age :</td> 32 <td><form:input path="age" /></td> 33 <td><form:errors path="age" cssClass="error" /></td> 34 </tr> 35 <tr> 36 <td colspan="3"><input type="submit" /></td> 37 </tr> 38 </table> 39 </form:form> 40 41 </body> 42 </html>
![](/assets/blank.gif)
可以通过定义“validatemessage.properties”文件,覆盖定义在持久化对象上的错误提示,通常属性文件中属性key为“@Annotation Name.object.fieldname“的形式:
NotEmpty.customer.name = Name is required! Range.customer.age = Age value must be between 1 and 150
代码运行Demo:
SpringMVC-Bean-Validation-JSR303-Example-2.zip
5、参考
http://www.mkyong.com/spring-mvc/spring-3-mvc-and-jsr303-valid-example/
http://www.cnblogs.com/myitmylife/p/3617084.html
http://www.cnblogs.com/liukemng/p/3738055.html
from: http://www.cnblogs.com/afeng7882999/p/4300032.html
Spring Validation(使用Hibernate Validator)相关推荐
- Spring Boot集成Hibernate Validator
废话不多说,直接开始集成环境. 一.环境集成 在项目中hibernate-Validator包在spring-boot-starter-web包里面有,不需要重复引用 .(整个Demo都是用PostM ...
- js 强校验 弱校验_还在手写表单校验逻辑?试试spring validation吧
Java识堂,一个高原创,高收藏,有干货的微信公众号,欢迎关注 前言 数据的校验是交互式网站一个不可或缺的功能,前端的js校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式校验等等常用的 ...
- SpringMVC集成Hibernate Validator进行注解式的参数校验——让代码更少、更加专注于业务逻辑
SpringMVC集成Hibernate Validator进行注解式的参数校验 --让代码更少.更加专注于业务逻辑 1 问题背景: 参数验证是一个常见的问题,例如验证用户输入的密码是否为空.邮箱是否 ...
- 如何优雅的做数据校验-Hibernate Validator详细使用说明
文章目录 Hibernate Validator的使用 依赖 bean约束声明和验证,Validator 方法约束声明和验证,ExecutableValidator 约束注解 空与非空检查 Boole ...
- 强悍的Spring之spring validation
spring validation实现对Restful请求的数据进行校验 1.前言 数据的校验是交互式网站一个不可或缺的功能,前端的js校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式 ...
- spring boot 1.4默认使用 hibernate validator
spring boot 1.4默认使用 hibernate validator 5.2.4 Final实现校验功能.hibernate validator 5.2.4 Final是JSR 349 Be ...
- springboot 报Spring boot 报Add an implement,such as Hibernate Validator, to the classpath
spring boot 版本1.4.7.RELEASE 1.启动报错如下: ationConfigEmbeddedWebAp ationConfigEmbeddedWebAp o. s. b. d ...
- Spring Validation最佳实践及其实现原理,参数校验没那么简单!
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:六点半起床 juejin.im/post/685654110 ...
- Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例
Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例 转自:通过注解的方式集成Spring 4 MVC+Hibernate 4+MySQL+Maven,开发项目样例 ...
最新文章
- JAVA8的LocalDateTime使用心得和工具类
- zabbix环境安装搭建
- 安全的加强的linux:SELinux
- 手机号码 mysql 存储类型_2021-01-06:mysql中,我存十亿个手机号码,考虑存储空间和查询效率,用什么类型的字段去存?...
- 机器学习性能度量(2):错误接受率 (FAR), 错误拒绝率(FRR),EER计算方法,python实现
- 基于owncloud构建私有云储存网盘
- 机器学习入门(1)之基本概念简介
- Web API-DOM事件高级
- 不可能解开的谜题 (程序员修炼之道,评注者序)
- 【单目标优化求解】基于matlab遗传算法求解非线性目标函数最小值问题【含Matlab源码 1574期】
- Jieba词性对照表
- 浅谈Java的伪随机数发生器和线性同余法
- vivado中文乱码更换中文等宽字体
- 华为p20如何连接计算机,华为P20 USB调试和开发人员选项的打开方法(EMUI8.1)
- 图扑数字孪生智慧隧道,新基建带来新生活
- 推荐几个程序员赚钱的平台,你有技术就有钱!
- 【巷子】---webpack配置非CMD规范的模块
- 【案例】这些日赚上万美金Youtube油管从业者 技术人的福音
- cot函数 java_java8、jdk8日期与字符串转化
- 教您一招解决Word不能复制粘贴问题
热门文章
- tomact如何处理一个http请求?
- 【行业报告】信贷场景下全流程数据风控体系——宜信
- 证券一哥炼成记——郭树清
- 华为,15万大军孤独行走在世界上
- c语言函数之间互相调用符号,如何实现C和C++函数互相调用
- Spring Boot - 自动配置实例解读
- 学习笔记(四)——JavaScript(一)
- h5 socket.io java,从HTML5 WebSocket到Socket.io
- MongoDB自动删除过期数据--TTL索引
- python随机生成中文字符串_利用python3随机生成中文字符的实现方法