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 />

如果不使用默认,可以使用下面配置:

<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> 

3、hibernate validator constraint 注解

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=)  被注释的元素必须在合适的范围内 

4、使用validator

在需要校验的对象前增加@Valid 注解(该注解位于javax.validation包中)来触发校验。这样就可以完成针对输入数据User对象的校验了,校验结果任然保存在BindingResult对象中。

 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 }
 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 }
 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>

可以通过定义“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)相关推荐

  1. Spring Boot集成Hibernate Validator

    废话不多说,直接开始集成环境. 一.环境集成 在项目中hibernate-Validator包在spring-boot-starter-web包里面有,不需要重复引用 .(整个Demo都是用PostM ...

  2. js 强校验 弱校验_还在手写表单校验逻辑?试试spring validation吧

    Java识堂,一个高原创,高收藏,有干货的微信公众号,欢迎关注 前言 数据的校验是交互式网站一个不可或缺的功能,前端的js校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式校验等等常用的 ...

  3. SpringMVC集成Hibernate Validator进行注解式的参数校验——让代码更少、更加专注于业务逻辑

    SpringMVC集成Hibernate Validator进行注解式的参数校验 --让代码更少.更加专注于业务逻辑 1 问题背景: 参数验证是一个常见的问题,例如验证用户输入的密码是否为空.邮箱是否 ...

  4. 如何优雅的做数据校验-Hibernate Validator详细使用说明

    文章目录 Hibernate Validator的使用 依赖 bean约束声明和验证,Validator 方法约束声明和验证,ExecutableValidator 约束注解 空与非空检查 Boole ...

  5. 强悍的Spring之spring validation

    spring validation实现对Restful请求的数据进行校验 1.前言 数据的校验是交互式网站一个不可或缺的功能,前端的js校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式 ...

  6. 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 ...

  7. 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 ...

  8. Spring Validation最佳实践及其实现原理,参数校验没那么简单!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:六点半起床 juejin.im/post/685654110 ...

  9. Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例

    Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例 转自:通过注解的方式集成Spring 4 MVC+Hibernate 4+MySQL+Maven,开发项目样例 ...

最新文章

  1. JAVA8的LocalDateTime使用心得和工具类
  2. zabbix环境安装搭建
  3. 安全的加强的linux:SELinux
  4. 手机号码 mysql 存储类型_2021-01-06:mysql中,我存十亿个手机号码,考虑存储空间和查询效率,用什么类型的字段去存?...
  5. 机器学习性能度量(2):错误接受率 (FAR), 错误拒绝率(FRR),EER计算方法,python实现
  6. 基于owncloud构建私有云储存网盘
  7. 机器学习入门(1)之基本概念简介
  8. Web API-DOM事件高级
  9. 不可能解开的谜题 (程序员修炼之道,评注者序)
  10. 【单目标优化求解】基于matlab遗传算法求解非线性目标函数最小值问题【含Matlab源码 1574期】
  11. Jieba词性对照表
  12. 浅谈Java的伪随机数发生器和线性同余法
  13. vivado中文乱码更换中文等宽字体
  14. 华为p20如何连接计算机,华为P20 USB调试和开发人员选项的打开方法(EMUI8.1)
  15. 图扑数字孪生智慧隧道,新基建带来新生活
  16. 推荐几个程序员赚钱的平台,你有技术就有钱!
  17. 【巷子】---webpack配置非CMD规范的模块
  18. 【案例】这些日赚上万美金Youtube油管从业者 技术人的福音
  19. cot函数 java_java8、jdk8日期与字符串转化
  20. 教您一招解决Word不能复制粘贴问题

热门文章

  1. tomact如何处理一个http请求?
  2. 【行业报告】信贷场景下全流程数据风控体系——宜信
  3. 证券一哥炼成记——郭树清
  4. 华为,15万大军孤独行走在世界上
  5. c语言函数之间互相调用符号,如何实现C和C++函数互相调用
  6. Spring Boot - 自动配置实例解读
  7. 学习笔记(四)——JavaScript(一)
  8. h5 socket.io java,从HTML5 WebSocket到Socket.io
  9. MongoDB自动删除过期数据--TTL索引
  10. python随机生成中文字符串_利用python3随机生成中文字符的实现方法