springMvc 支持hibernate validator
5月23日 西安 OSC 源创会开始报名啦,存储、虚拟机、Docker 等干货分享
一、基础框架 SpringMVC-4.0.3.RELEASE,使用的maven来管理jar依赖
二、依赖的jar,
|
1
2
3
4
5
|
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.0.2.Final</version> </dependency> |
上面是对Hibernate Validator 支持所需要的包,spring的jar省略。
三、spring配置文件 applicationContext.xml
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<mvc:annotation-driven validator="validator" /> <!-- 以下 validator ConversionService 在使用 mvc:annotation-driven 会 自动注册--> <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> <!-- 在web环境中一定要定位到classpath 否则默认到当前web应用下找 --> <value>classpath:messages</value> <value>classpath:org/hibernate/validator/ValidationMessages</value> </list> </property> <property name="useCodeAsDefaultMessage" value="false"/> <property name="defaultEncoding" value="UTF-8"/> <property name="cacheSeconds" value="60"/> </bean> |
经过上面三步,就可以让SpringMVC支持hibernate Validator,可以说整合已大功告成。现在看看具体使用
四、需要验证的实体类
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public class IssueMessageBO { @NotNull(message="{message.content.empty}") // 将验证消息写在classpath下message.properties @Size(min = 2, max = 140,message="{message.content.length}") private String content;//发布内容 private String qiniuImgInfo;//七牛图片信息 @NotNull(message="{message.schoolIds.empty}") private String schoolIds;//学校 private int publisherType;//发布者类型 private boolean hasTop;//是否置顶 private int topDay; //置顶的天数 ....} |
JSR-303只是一个规范,而Spring也没有对这一规范进行实现,那么当我们在SpringMVC中需要使用到JSR-303的时候就需要我们提供一个对JSR-303规范的实现,Hibernate Validator是实现了这一规范的,这里我将以它作为JSR-303的实现来讲解SpringMVC对JSR-303的支持。
JSR-303的校验是基于注解的,它内部已经定义好了一系列的限制注解,我们只需要把这些注解标记在需要验证的实体类的属性上或是其对应的get方法上.
JSR-303原生支持的限制有如下几种:

除了JSR-303原生支持的限制类型之外我们还可以定义自己的限制类型。定义自己的限制类型首先我们得定义一个该种限制类型的注解,而且该注解需要使用@Constraint标注。
五、controller中的数据验证
|
1
2
3
4
5
6
7
8
9
10
|
@RequestMapping(value = "/addMessage.action", method = RequestMethod.POST) public @ResponseBody String addMessage(HttpServletRequest request, HttpServletResponse response,@Valid IssueMessageBO issueMessageBO,BindingResult result)throws IOException{ Result retVal = ValidatorResultHandler.handle(result); if(retVal.getStatus() == Const.FAILURE){ response.getWriter().write(JSON.toJSONString(retVal)); }else{ response.getWriter().write(JSON.toJSONString(treeholeMessageService.issueMessage(issueMessageBO))); } return null; } |
在 applicationContext.xml 加入了
|
1
|
<mvc:annotation-driven validator="validator" /> |
Spring会自动检测classpath下的JSR-303提供者并自动启用对JSR-303的支持,把对应的校验错误信息放到Spring的Errors对象中
然后我使用了 validatorResultHandler 类来处理验证结果
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public class ValidatorResultHandler { public static Result handle(BindingResult result){ Result retVal = new Result(); if(result.hasErrors()){ List<ObjectError> list = result.getAllErrors(); ObjectError oe = list.get(0); retVal.setMessage(oe.getDefaultMessage()); }else{ retVal.setStatus(Const.SUCCESS); } return retVal; }} |
这样处理就完成了。
六、有的时候,我们对一个实体类需要有多中验证方式,在不同的情况下使用不同验证方式,比如说对于一个实体类来的id来说,保存的时候是不需要的,对于更新时是必须的,可以如下配置:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
public class UserModel { private int id; private String username; private String content; @NotNull(message="{id.empty}",groups={First.class}) public int getId() { return id; } public void setId(int id) { this.id = id; } @NotNull(message="{username.empty}",groups = {First.class, Second.class}) public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @NotNull(message="{content.empty}",groups = {First.class, Second.class}) public String getContent() { return content; } public void setContent(String content) { this.content = content; }} |
通过 groups 对验证进行分组
在controler中的代码如下
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
@RequestMapping(value = "/save.action", method = RequestMethod.POST)public @ResponseBody String save(HttpServletRequest request, HttpServletResponse response,@Validated({ Second.class}) UserModel userModel,BindingResult result) throws IOException{ response.setCharacterEncoding("utf-8"); System.out.println("----"+userModel.getUsername()); if(result.hasErrors()){ List<ObjectError> list = result.getAllErrors(); for(ObjectError objectError:list){ System.out.println(objectError.getDefaultMessage()); } response.getWriter().write(JSON.toJSONString(list)); return null; } response.getWriter().write("rrrrrr"); return null;}@RequestMapping(value = "/update.action", method = RequestMethod.POST)public @ResponseBody String update(HttpServletRequest request, HttpServletResponse response,@Validated({First.class, Second.class}) UserModel user,BindingResult result) throws IOException{ response.setCharacterEncoding("utf-8"); if(result.hasErrors()){ List<ObjectError> list = result.getAllErrors(); for(ObjectError objectError:list){ System.out.println(objectError); } response.getWriter().write(JSON.toJSONString(list)); return null; } response.getWriter().write("rrrrrr"); return null;} |
springMvc 支持hibernate validator的更多相关文章
- SpringMVC利用Hibernate validator做字段验证
1.添加Hiberbate validator相关的jar包 2.字需要验证的formbean 上添加验证的注解,内置注解有: dBean Validation 中内置的 constraint @Nu ...
- JSR303的数据校验-Hibernate Validator方式实现
1.什么是JSR303? JSR303是java为bean数据合法性校验所提供的一个标准规范,叫做Bean Validation. Bean Validation是一个运行时的数据校验框架,在验证之后 ...
- SpringMVC之使用Validator接口进行验证
对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证.SpringMVC自身对数据在服务端的校验有一个比较好的支持,它能将我们提 ...
- hibernate validator 专题
JSR-303 原生支持的限制有如下几种 : 限制 说明 @Null 限制只能为 null @NotNull 限制必须不为 null @AssertFalse 限制必须为 false @AssertT ...
- SpringMVC--使用hibernate validator数据校验
JSR 303 Spring3开始支持JSR 303 验证框架,JSR303是Java为Bean数据合法性校验所提供的标准框架.JSR 303 支持XML和注解风格的验证,通过在Bean属性上标注类似 ...
- 如何在SSM项目配置springMVC校验框架validator
1.在springMVC配置文件配置添加如下信息 <!-- 表单验证框架 --> <bean id="validator" class="org.spr ...
- Hibernate validator验证
spring-mvc配置 <mvc:annotation-driven validator="validator" /> <bean id="valid ...
- spring MVC 使用 hibernate validator验证框架,国际化配置
spring mvc使用hibernate validator框架可以实现的功能: 1. 注解java bean声明校验规则. 2. 添加message错误信息源实现国际化配置. 3. 结合sprin ...
- hibernate Validator 6.X 的学习,bean的约束(字段,get方法上的验证)
一:背景说明 验证数据是一个常见的任务,它贯穿于所有应用层,从呈现到持久层.通常在每个层中都执行相同的验证逻辑,耗时且容易出错.为了避免这些验证的重复,开发商往往把验证逻辑直接进入的领域模型,在领域类 ...
随机推荐
- android对应版本号
android对应版本号 Platform Version API Level VERSION_CODE Notes Android 4.2 JELLY_BEAN_MR1 Platform Highl ...
- 转载: Nova-Router 分析
很早的实现了,nova代码已经做了很多修改了. 以创建实例 URL(http://10.191.7.32:8773/v1.1/service?*****)为例说明 Router 的执行流程 1. 依据 ...
- C#编程规范
C#编程规范 Version 1.0 目录 第一章 概述.... 4 规范制定原则.... 4 术语定义.... 4 Pascal 大小写.... 4 Camel 大小写.... 4 文件命名组织 ...
- 依赖注入及AOP简述(十二)——依赖注入对象的行为增强(AOP) .
四.依赖注入对象的行为增强(AOP) 前面讲到,依赖注入框架的最鲜明的特点就是能够提供受容器管理的依赖对象,并且可以对对象提供行为增强(AOP)功能,所以这一章我们来讨论有关AOP的话题. 1. ...
- iSlider手机平台JS滑动组件
iSlider手机平台JS滑动组件,无任何插件依赖.它能够处理任何元素,例如图片或者DOM元素.它有如下特性:能够自定义动画,自带的动画包括default, rotate, flip 和 depth你 ...
- 如何生成log新信息背景图片和在图片上添加水印
在图片上添加文字水印,其实就是要用到两个类, using System.Drawing; using System.Drawing.Drawing2D; 废话不多说了,直接上代 ...
- PHP基础示例:商品信息管理系统v1.1
实现目标:使用php和mysql写一个商品信息管理系统,并带有购物车功能 一.创建数据库和表 1.创建数据库和表:demodb 2.创建表格:goods 字段:商品编号,商品名称,商品类型,商品图片, ...
- iOS的推送机制APNs:本地推送&远程推送
本地推送: 本地推送主要应用在备忘录,闹钟等本地的,基于时间定时的消息提醒.本篇不做详细描述. 远程推送:APNS(苹果推送通知服务) iOS远程推送机制的原理及流程: 注册推送(橙色部分):若该Ap ...
- Windows 去掉启动时的放大镜
控制面板-轻松访问中心-使计算机更易于显示不勾选 启用放大镜
- VueJS搭建简单后台管理系统框架 (二) 模拟Ajax数据请求
开发过程中,免不了需要前台与后台的交互,大部分的交互都是通过Ajax请求来完成,在服务端未完成开发时,前端需要有一个可以模拟Ajax请求的服务器. 在NodeJs环境下,通过配置express可访问的 ...