对于 JSR 303 验证,目前有两个实现,一个是 Hibernate Validator,一个是 Apache BVal。本教程采用的是 Hibernate Validator,注意它和 Hibernate无关,只是使用它进行数据验证。

1. 下载与安装 Hibernate Validator

用户可以通过地址“https://sourceforge.net/projects/hibernate/files/hibernate-validator/”下载 Hibernate Validator,本教程选择的是 hibernate-validator-4.3.2.Final-dist.zip。

首先将下载的压缩包解压,然后将 \hibernate-validator-4.3.2.Final\dist 目录下的 hibernate-validator-4.3.2.Final.jar 和 \hibernate-validator-4.3.2.Final\dist\lib\required 目录下的 jboss-logging-3.1.0.Final.jar、validation-api-1.0.0. GA.jar 复制到应用的 \WEB-INF\lib 目录下。

2. 配置属性文件与验证器

如果将验证错误消息放在属性文件中,那么需要在配置文件中配置属性文件,并将属性文件与 Hibernate Validator 关联,具体配置代码如下:

<!-- 配置消息属性文件 -->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"><!-- 资源文件名 --><property name="basenames"><list><value>/WEB-INF/resource/errorMessages</value></list></property><!-- 资源文件编码格式 --><property name="fileEncodings" value="utf-8" /><!-- 对资源文件内容缓存的时间,单位为秒 --><property name="cacheSeconds" value="120" />
</bean>
<!-- 注册校验器 -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"><!-- hibernate 校验器 --><property name="providerClass" value="org.hibernate.validator.HibernateValidator" /><!-- 指定校验使用的资源文件,在文件中配置校验错误信息,如果不指定则默认使用 classpath下的 ValidationMessages.properties --><property name="validationMessageSource" ref="messageSource" />
</bean>
<!--开启 Spring的 Valid 功能 -->
<mvc:annotation-driven conversion-service="conversionService" validator="validator" />

3. 标注类型

JSR 303 不需要编写验证器,但需要利用它的标注类型在领域模型的属性上嵌入约束。

1)空检查

  • @Null:验证对象是否为 null。
  • @NotNull:验证对象是否不为 null,无法检查长度为 0 的字符串。
  • @NotBlank:检查约束字符串是不是 null,以及被 trim 后的长度是否大于 0,只针对字符串,且会去掉前后空格。
  • @NotEmpty:检查约束元素是否为 null 或者是 empty。

示例如下:

@NotBlank(message="{goods.gname.required}") //goods.gname.required为属性文件的错误代码
private String gname;

2)boolean 检查

  • @AssertTrue:验证 boolean 属性是否为 true。
  • @AssertFalse:验证 boolean 属性是否为 false。

示例如下:

@AssertTrue
private boolean isLogin;

3)长度检查

  • @Size(min=,max=):验证对象(Array、Collection、Map、String)长度是否在给定的范围之内。
  • @Length(min=,max=):验证字符串长度是否在给定的范围之内。

示例如下:

@Length(min=1,max=100)
private String gdescription;

4)日期检查

  • @Past:验证 Date 和 Callendar 对象是否在当前时间之前。
  • @Future:验证 Date 和 Calendar 对象是否在当前时间之后。
  • @Pattern:验证 String 对象是否符合正则表达式的规则。

示例如下:

@Past(message="{gdate.invalid}")
private Date gdate;

5)数值检查


示例如下:

@Range(min=10,max=100,message="{gprice.invalid}")
private double gprice;

由于篇幅有限,大家可结合《Spring MVC Hibernate-Validator数据验证实例》教程学习。

Spring MVC JSR-303验证框架之Hibernate-Validator相关推荐

  1. Spring MVC-07循序渐进之验证器 下 (JSR 303验证)

    概述 JSR 303 Validator Demo 测试 总结 源码 概述 JSR303"Bean Validation" 和 JSR349 "Bean Validati ...

  2. SSM框架笔记14:Spring MVC表单验证

    Spring MVC表单验证   在Spring MVC中,表单验证有三种方法.   一.基本校验 这种方法是基于handler的,优点是定义方便,缺点是不便于复用. 1.两个接口:Errors/Bi ...

  3. JSR-303 Bean Validation 介绍及 Spring MVC 服务端验证最佳实践

    任何时候,当要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情. 应用程序必须通过某种手段来确保输入参数在上下文来说是正确的. 分层的应用在很多时候,同样的数据验证逻辑会出现在不同的层, ...

  4. Spring MVC表单验证(带批注)

    这篇文章提供了一个简单HTML表单验证示例. 它基于带有注释的Spring MVC示例. 该代码可在GitHub的Spring-MVC-Form-Validation目录中找到. 数据 在此示例中,我 ...

  5. jsr 303_使用Spring和JSR 303进行方法参数验证

    jsr 303 Spring提供了一种使用JSR 303 bean验证来验证方法参数的简便方法. 在这篇文章中,我们将看到如何使用此功能. 设定 首先,我们需要通过创建MethodValidation ...

  6. jsr303 spring_使用Spring和JSR 303进行方法参数验证

    jsr303 spring Spring提供了一种使用JSR 303 bean验证来验证方法参数的简便方法. 在这篇文章中,我们将看到如何使用此功能. 建立 首先,我们需要通过创建MethodVali ...

  7. 使用Spring和JSR 303进行方法参数验证

    Spring提供了一种使用JSR 303 bean验证来验证方法参数的简便方法. 在这篇文章中,我们将看到如何使用此功能. 设定 首先,我们需要通过创建MethodValidationPostProc ...

  8. JSR 303 - Bean Validation与Hibernate Validation 介绍

    一.介绍 在应用程序中,通过使用 Bean Validation 或是你自己定义的 constraint,例如 @NotNull, @Max, @ZipCode, 就可以确保数据模型(JavaBean ...

  9. Spring MVC中的验证组

    可以通过groups属性将Bean验证中的验证约束添加到一个或多个组. 这使您可以限制在验证期间应用的约束集. 在某些小组应先于其他小组进行验证(例如在向导中)的情况下,这可能很方便. 从Spring ...

  10. mvc获取ajax上传base64文件,Spring MVC+ajax+base64+amazeui框架上传头像带裁剪功能

    后台关键代码String filePath = null; String uuid = UUID.randomUUID().toString().replace("-", &quo ...

最新文章

  1. 9.spark core之共享变量
  2. Python将图像分割成小块然后将所有的块重新拼接在一起
  3. Kosaraju 算法检测有向图的强连通性
  4. 用 javascript 获取当页面上鼠标(光标)位置
  5. s时钟画布 android,Canvas画布实现自定义时钟效果
  6. [必看]首先要求做到的事情![sumtec]
  7. windbg 查看 PEG
  8. 区域生长影像分割算法
  9. 为flash游戏终极实用提速
  10. excel两列数据对比找不同_Excel | 如何核对两列/行数据,找不同?
  11. 【vue】浏览器播放提示音audio
  12. python计算1的平方减2的平方加3的平方减4的平方怎么算_墙体的面积怎么算的快?墙的平方快速计算方法...
  13. 值得借鉴:耗时两个月的求职经历
  14. 财务金额转换:小写金额转换成大写算法
  15. 气球java游戏_气球游戏-2019腾讯笔试
  16. 绘画教程:伤口疤痕应该怎么画?如何画出皮肤质感?
  17. Hive常见面试题汇总
  18. 模拟山羊收获日Android,模拟山羊收获日手机版
  19. win7删除Guest和administrator内置账户及账户所属文件
  20. android打开另外的app两种方式,内置到自己本身的app,重新打开app,

热门文章

  1. vmware vsphere powercli 因为在此系统中禁止执行脚本
  2. 压测学习总结(7)——Jmeter性能测试之脚本增强
  3. 支付业务与技术架构学习总结(6)——对账系统的设计
  4. Oracle学习总结(2)——Oracle数据库设计总结(三大范式)
  5. Myeclipse学习总结(16)——MyEclipse CI 2018.8.0首次更新,全新来袭!(内附破解激活文件,亲测破解100%)
  6. Spring MVC学习总结(8)——Swagger入门详解
  7. 淘宝的开源分布式文件系统TFS
  8. PHP学习总结(8)——PHP入门篇之WAMPServer集成环境安装和配置
  9. Java基础学习总结(41)——JPA常用注解
  10. python回车换行怎么不行_解决pycharm回车之后不能换行或不能缩进的问题