JSR-303规范,Bean Validation
一:
JSR 303是JAVA EE 6中的一项子规范,叫做Bean Validation,官方参考实现是Hibernate Validator,此实现与Hibernate ORM没有任何关系。JSR 303用于对Java Bean中的字段的值进行验证。
本教程翻译自Hibernate Validator 4.0 GA指南,并参考JSR
303的规范,本着尽量不用JSR规范之外的特性,文档在编写时尽量不提及底层实现Hibernate Validator,而是关注Bean
Validation规范本身。如果有不对之处,请大家多提意见,互相提高,谢谢! 小弟编写的中文手册在压缩包中,和Hibernate
Validator 4.0 GA放在一起,省得大家再下载jar文件了哦!嘿嘿!
那个大家多提意见哦!谢谢!哈!
文章source:http://www.iteye.com/topic/500928
hibernate-validator-4.0.0.GA-dist.zip (4.8 MB)下载地址: http://dl.iteye.com/topics/download/d3374bdc-5a36-3270-8ffc-624356cf0716
二:
JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,官方参考实现是Hibernate Validator。
此实现与Hibernate ORM 没有任何关系。JSR 303 用于对Java Bean 中的字段的值进行验证。
Spring MVC 3.x之中也大力支持 JSR-303,可以在控制器中对表单提交的数据方便地验证。
JSR 303内置的约束规则:
@AssertTrue / @AssertFalse
- 验证适用字段:boolean
- 注解说明:验证值是否为true / false
- 属性说明:-
@DecimalMax / @DecimalMin
- 验证适用字段:BigDecimal,BigInteger,String,byte,short,int,long
- 注解说明:验证值是否小于或者等于指定的小数值,要注意小数存在精度问题
- 属性说明:公共
@Digits
- 验证适用字段:BigDecimal,BigInteger,String,byte,short,int,long
- 注解说明:验证值的数字构成是否合法
- 属性说明:integer:指定整数部分的数字的位数。fraction: 指定小数部分的数字的位数。
@Future / @Past
- 验证适用字段:Date,Calendar
- 注解说明:验证值是否在当前时间之后 / 之前
- 属性说明:公共
@Max / @Min
- 验证适用字段:BigDecimal,BigInteger,String,byte,short,int,long
- 注解说明:验证值是否小于或者等于指定的整数值
- 属性说明:公共
@NotNull / @Null
- 验证适用字段:引用数据类型
- 注解说明:验证值是否为非空 / 空
- 属性说明:公共
@Pattern
- 验证适用字段:String
- 注解说明:验证值是否配备正则表达式
- 属性说明:regexp:正则表达式flags: 指定Pattern.Flag 的数组,表示正则表达式的相关选项。
@Size
- 验证适用字段:String,Collection,Map,数组
- 注解说明:验证值是否满足长度要求
- 属性说明:max:指定最大长度,min:指定最小长度。
@Valid
- 验证适用字段:引用类型
- 注解说明:验证值是否需要递归验证
- 属性说明:无
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
使用Spring MVC 和 JSR-303的标注做表单提交的服务器端验证时,
@Valid 标注的Command对象和BindingResult参数一定要紧挨着。要不然
数据绑定错误直接抛异常,不会封装成一个BindingResult对象。
- public String login(@Valid User user, BindingResult br, Map<String, Object> model) {
- if (br.hasErrors()) {
- return "login";
- }
- return "redirect:/salary/list.do";
- }
下:
三:
spring 3 mvc BindingResult result 校验注意点
BindingResult result
的使用,必须在controller层增加@ModelAttribute("fundsPreTransfer")
它和ModelAttribute同时使用,并且参数要紧挨着。这样才不会报。Errors/BindingResult argument
declared without preceding model attribute异常。
注意:
@RequestMapping("/funds/transfer/save")
public String save(
@ModelAttribute("fundsPreTransfer") FundsPreTransfer fundsPreTransfer,
BindingResult result, Model model, HttpServletRequest request) {
// 服务器端校验
fundsTransferValidator.validate(fundsPreTransfer, result);
if (result.hasErrors()) {
// 如果存在错误,则跳转到显示页面
return "funds/transfer/show";
}
Double transferAmount = fundsPreTransfer.getTransferAmount();
String comments = fundsPreTransfer.getComments();
fundsPreTransfer.setTransferIp(request.getRemoteAddr());
// query fundsSerialNumber
String fundsSerialNumber = RandomStringUtils.random(9, false, true);
fundsPreTransfer.setFundsSerialNumber(fundsSerialNumber);// 设置流水号
// 保存转账记录。
fundsPreTransferService.persist(fundsPreTransfer, getUsername(),
transferAmount);
// 传递值到下一页面。
String fundsAccount = request.getParameter("fundsAccount");// 资金账号
model.addAttribute("fundsAccount", fundsAccount);
model.addAttribute("counterpartyFundsAccount",
request.getParameter("counterpartyFundsAccount"));
// 查出username
FundsBase fundsBase = fundsBaseService.findByFundsAccount(fundsAccount);
BaseAccount baseAccount = fundsBase.getBaseAccount();
String username = baseAccount.getUsername();
model.addAttribute("username", username);
model.addAttribute("transferAmount", transferAmount);
model.addAttribute("comments", comments);
model.addAttribute("fundsSerialNumber", fundsSerialNumber);
return "funds/transfer/show_next";
}
JSR-303规范,Bean Validation的更多相关文章
- JSR 303 进行后台数据校验
一.JSR 303 1.什么是 JSR 303? JSR 是 Java Specification Requests 的缩写,即 Java 规范提案. 存在各种各样的 JSR,简单的理解为 JSR 是 ...
- JSR 303 - Bean Validation 介绍及最佳实践
JSR 303 - Bean Validation 介绍及最佳实践 JSR 303 – Bean Validation 是一个数据验证的规范,2009 年 11 月确定最终方案.2009 年 12 月 ...
- JSR教程1——JSR 303 - Bean Validation介绍
1.Bean Validation 在任何时候,当你要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情.应用程序必须通过某种手段来确保输入进来的数据从语义上来讲是正确的.在通常的情况下, ...
- JSR 303 - Bean Validation 介绍及最佳实践(转)
JSR 303 – Bean Validation 是一个数据验证的规范,2009 年 11 月确定最终方案.2009 年 12 月 Java EE 6 发布,Bean Validation 作为一个 ...
- JSR 303 - Bean Validation 模型验证
类是转载的,不知道转的哪里的. 此类依赖 JSR 303 – Bean Validation, Hibernate Validator. 代码不能直接运行.意会一下.自己改改. import com. ...
- JSR-303 Bean Validation 介绍及 Spring MVC 服务端参数验证最佳实践
任何时候,当要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情. 应用程序必须通过某种手段来确保输入参数在上下文来说是正确的. 分层的应用很多时候同样的数据验证逻辑会出现在不同的层,这样 ...
- JSR-303 Bean Validation 介绍及 Spring MVC 服务端验证最佳实践
任何时候,当要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情. 应用程序必须通过某种手段来确保输入参数在上下文来说是正确的. 分层的应用在很多时候,同样的数据验证逻辑会出现在不同的层, ...
- JSR 303 - Bean Validation 是什么?
关于 Bean Validation JSR 303 - Bean Validation 是jree6 中的一项子规范,JSR 303 - Bean Validation着重解决以下实际问题: 在任何 ...
- JSR 303 - Bean Validation 简单介绍及用法
一.JSR-303简单介绍 JSR-303 是 JAVA EE 6 中的一项子规范.叫做 Bean Validation,官方參考实现是Hibernate Validator. 此实现与 Hibern ...
- SpringMVC中实现Bean Validation(JSR 303 JSR 349 JSR 380)
JSR 303是针对bean数据校验提出的一个规范.使用注解方式实现数据校验. 每个注解的用法这里就不多介绍,请移步JSR 303 - Bean Validation 介绍及最佳实践 笔者上面提到的J ...
随机推荐
- 【python】-- 类的多继承、经典类、新式类
继承知识点补充 在python还支持多继承,但是一般我们很少用,有些语言干脆就不支持多继承,有多继承,就会带来两个概念,经典类和新式类. 一.多继承 之前我们都是讲的单继承,那么什么是多继承呢?说白了 ...
- Linux mariadb(Mysql)的主从复制架构
mysql的主从复制架构,需要准备两台机器,并且可以通信,安装好2个mysql,保持版本一致性 mysql -v 查看数据库版本 1.准备主库的配置文件 /etc/my.cnf 写入开启主库的参数[ ...
- js:深入函数的定义
函数定义方式: 1.function fun1(){alert("fun1");} //函数就是一个很特殊的对象.是一个Function的实例.事实上在内存中存储的操作是通过一个 ...
- Nodejs课堂笔记-第四课 Dynamodb为何物
本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢! 我喜欢带着目标来学习新知识.因此学习nodejs过程中,不喜欢只看枯燥的语法 ...
- Struts详解
1.什么是MVC? MVC是Model,View,Controller的缩写,MVC是Application开发的设计模式, 也就是大家所知道的Model2.在MVC的设计模式中,它包括三类对象:(1 ...
- PhpStorm编辑器
PhpStorm编辑文字过程中发现其有二种方式, 可以通过按“Insert”键进行转换. 第一种是直接在光标后面修改 第二种是直接在光标处修改 很多编辑器也有类似的输入转换,包括Mac的命令台
- 从分布式锁来看redis和zookpeer!
从分布式锁来看redis和zookpeer! 目前网上大部分的基于zookpeer,和redis的分布式锁的文章都不够全面.要么就是特意避开集群的情况,要么就是考虑不全,读者看着还是一脸迷茫.坦白说, ...
- 制作透明的图标ICO
1.使用crowldraw画图保存为PNG格式,选择"被遮盖区域",然后保存(保存为PNG的透明格式). 2.使用IconWorkshop把透明的PNG格式导出为ICO.
- 实用篇:说说我在JavaScript项目中使用的工具类
在JavaScript的开发中,我们都会写一些工具类来帮我们简化一些业务操作的逻辑,一下就貼几个我在项目开发过程中常用的工具类.表达能力有限,各位看官还是看源码吧. 一.日期处理工具类. /** * ...
- hd acm2025
问题:平面上有n条折线,问这些折线最多能将平面分割成多少块? 思路:像这种平面被线段分割成几部分的问题,80%用递推解决,因为n条线段与(n-1)条线段能建立联系. 你可以作图观察一下,会发现新增 ...