JSR-303规范,Bean Validation(spring mvc中如何校验)

转载 2015年07月07日 13:59:49

序:

利用bean-validator在spring mvc完成表单的校验极为方便,相比于struts2的validate用法方便太多了。下面这篇文章个人觉得对JSR303从应用层面做了一个很详细的介绍,而且也附属了在spring mvc中使用的例子。

感谢作者的幸苦劳动,这里作为自己学习与记录。

正文:

一:

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

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

Spring4 对Bean Validation规范的新支持(方法级别验证)

一、Bean Validation框架简介  写道 Bean Validation standardizes constraint definition, declaration and valida...
  • dreamsunday
  • dreamsunday
  • 2014年11月19日 22:24
  • 5182

JSR-303规范,Bean Validation

一: JSR 303是Java EE 6中的一项子规范,叫做Bean Validation,官方参考实现是hibernate Validator,此实现与Hibernate ORM没有任何关系。...
  • u011679955
  • u011679955
  • 2017年01月18日 09:17
  • 103

Spring MVC学习(一)结合Maven,利用JSR-303实现验证

实现表单的验证,我用的环境:STS 3.6.3。         直接使用STS建立Spring MVC项目。很简单,直接结合maven进行下载,所有的jar包不需要自己自行配置。 可以在pom....
  • u012905439
  • u012905439
  • 2015年02月05日 12:16
  • 2049

springmvc 使用JSR-303进行数据校验

项目中,通常使用较多的是前端的校验,比如页面中js校验以及form表单使用bootstrap校验。然而对于安全要求较高点建议在服务端进行校验。服务端校验: 控制层controller:校验页面请求的参...
  • bear_wr
  • bear_wr
  • 2016年08月30日 12:33
  • 5434

SpringMVC BindingResult验证框架Validation特殊用法

基本用法不说了,网上例子很多,这里主要介绍下比较特殊情况下使用的方法。 1. 分组 有的时候,我们对一个实体类需要有多中验证方式,在不同的情况下使用不同验证方式,比如说对于一个实体类来的id来说,...
  • clypm
  • clypm
  • 2017年04月06日 10:56
  • 4457

Spring Bean Validation

我们都知道在Spring MVC中要使用Bean Validation验证Controller类中的方法入参可以很轻松的做到,具体可以查相关资料。但是相对于数据层就没有找到优雅的验证方式。不久前看Sp...
  • u012410733
  • u012410733
  • 2016年10月11日 19:45
  • 1525

Spring Validation分组校验

后台校验有很多的工具,最开始用的是@Valid,这个是比较简单的,不支持分组校验。Spring用@Validated对@Valid进行了封装,这样就满足了分组校验。其实就是增加了一个group来对校验...
  • xuanfengling
  • xuanfengling
  • 2016年05月31日 10:52
  • 3407

springmvc服务端校验hibernate validation配置

springmvc服务端校验hibernate validation的配置 0.需要引3个jar包     hibernate-validator-4.3.0.Final.jar     jbos...
  • yuhuafeixian
  • yuhuafeixian
  • 2017年03月17日 17:56
  • 1796

【SpringMVC整合MyBatis】validation校验-商品修改校验

springmvc校验 1.校验理解 项目中,通常使用较多是前端的校验,比如页面中js校验。对于安全要求较高点建议在服务端进行校验。 服务端校验: 控制层controller:校验页面请求的参数...
  • u013517797
  • u013517797
  • 2015年08月12日 11:28
  • 4592

在 SpringMVC 中对表单提交参数进行验证(使用 Bean Validator)

在 SpringMVC 项目中,有时需要对前端页面上传的表单参数进行一定的限制,包括不为空或者长度等。在控制器的各种方法中进行诸如如下方式的判断势必造成大量重复的代码,因此我们使用 Bean Vali...
  • zbl1146556298
  • zbl1146556298
  • 2017年12月02日 22:40
  • 95
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JSR-303规范,Bean Validation(spring mvc中如何校验)
举报原因:
原因补充:

(最多只允许输入30个字)