您的位置:首页 > Web前端 > JavaScript

JSR-303规范,Bean Validation

2015-12-03 21:55 621 查看

一:

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对象。

Java代码
@RequestMapping(value="/login", method=RequestMethod.POST)

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 校验注意点

MVCSpring

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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: