spring mvc 采用 jsr303 bean validation 校验框架

http://blog.csdn.net/ljwhx2002/article/details/8490011


1,JSR 303 http://jcp.org/en/jsr/detail?id=303

这是一个规范,定义了一些元素来进行bean的数据校验,比如 你的model有一个 user.java ,里面有一个email,当用户注册时候要验证email是否合法。 一般做法是js前端校验,但是不安全,作为完整安全解决方案,我们必须后端校验。

表 1. Bean Validation 中内置的 constraint
 

Constraint详细信息
@Null被注释的元素必须为 null
@NotNull被注释的元素必须不为 null
@AssertTrue被注释的元素必须为 true
@AssertFalse被注释的元素必须为 false
@Min(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max, min)被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction)被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past被注释的元素必须是一个过去的日期
@Future被注释的元素必须是一个将来的日期
@Pattern(value)被注释的元素必须符合指定的正则表达式
hibernate对这个规范做了实现和扩展;

Constraint详细信息
@Email被注释的元素必须是电子邮箱地址
@Length被注释的字符串的大小必须在指定的范围内
@NotEmpty被注释的字符串的必须非空
@Range被注释的元素必须在合适的范围内

2,jsr303实现

目前实现较好的 validation有 Hibernate Validator,它 是 Bean Validation 的参考实现 . Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint。 可以独立使用,哪怕你的架构是 spring mvc + ibatis 也可以单独使用此校验框架。 好处看下面就知道了:


3,spring mvc中如何使用jsr303 validation

1)首先要基于annotion注解驱动,配置spring中配置

[html]  view plain copy
  1. <mvc:annotation-driven />  


2)相关jar包,如果用的是maven


[html]  view plain copy
  1. <repositories>  
  2.         <repository>  
  3.             <id>JBoss repository</id>  
  4.             <url>http://repository.jboss.org/nexus/content/groups/public/</url>  
  5.         </repository>  
  6.     </repositories>  
  7.    
  8.     <properties>  
  9.         <spring.version>3.0.5.RELEASE</spring.version>  
  10.     </properties>  
  11.    
  12.     <dependencies>  
  13.    
  14.         <!-- Spring 3 dependencies -->  
  15.         <dependency>  
  16.             <groupId>org.springframework</groupId>  
  17.             <artifactId>spring-core</artifactId>  
  18.             <version>${spring.version}</version>  
  19.         </dependency>  
  20.    
  21.         <dependency>  
  22.             <groupId>org.springframework</groupId>  
  23.             <artifactId>spring-web</artifactId>  
  24.             <version>${spring.version}</version>  
  25.         </dependency>  
  26.    
  27.         <dependency>  
  28.             <groupId>org.springframework</groupId>  
  29.             <artifactId>spring-webmvc</artifactId>  
  30.             <version>${spring.version}</version>  
  31.         </dependency>  
  32.    
  33.         <!-- Hibernate Validator -->  
  34.         <dependency>  
  35.             <groupId>org.hibernate</groupId>  
  36.             <artifactId>hibernate-validator</artifactId>  
  37.             <version>4.2.0.Final</version>  
  38.         </dependency>  
  39.    
  40.     </dependencies>  


如果不是maven,单独下来hibernate-validator.jar到工程即可。

3)在model(数据交互的一些对象,或者vo)中声明
           

[java]  view plain copy
  1. @NotEmpty(message="名字不能为空")  
  2.     private String name;  
  3.   
  4.   @NotEmpty(message="email不能为空")  
  5.   @Email(message="email格式不合法")  
  6.     private String email;  

[java]  view plain copy
  1. 4)在controller中使用@valid 和BindingResult :  
[java]  view plain copy
  1. <span style="font-size:18px;">@RequestMapping(value="/test")  
  2. @ResponseBody  
  3. private User test(@Valid User u,BindingResultresult){  
  4. if(result.hasErrors()){//这个是spring validation校验后返回的结果对象  
  5. //如果校验失败,你要做什么事情  
  6. String code = result.getFieldError().getCode();//验证出错的那个类型名称 比如NotEmpty  
  7.         result.getFieldError().getDefaultMessage());//出错的信息  
  8. return m;  
  9. }else{  
  10. return null;  
  11. }  
  12.   
  13. }</span>  


    5)页面上如果需要显示错误,要么通过el表达式取model中值,也可以使用spring form标签:

<span style="color: rgb(0, 153, 0);"><form:errors path<span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"*"</span> cssClass<span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"errorblock"</span> element<span style="color: rgb(102, 204, 102);">=</span><span style="color: rgb(255, 0, 0);">"div"</span> <span style="color: rgb(102, 204, 102);">/</span>></span>

  最后,我使用的是spring mvc+ mybatis, hibernate validation是可独立的一块和orm并无太大关系。 ibatis在validation规范并没有实现。


参考文档

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/validation.html#validation-mvc-jsr303 

  1. Spring JSR303 validation documentation   spring帮助文档
  2. JSR303 bean validation 
  3. Hibernate Validator

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值