您的位置:首页 > 编程语言 > Java开发

spring mvc 采用 jsr303 bean validation 校验框架

2015-06-19 09:20 615 查看
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
plaincopy

<mvc:annotation-driven />

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

[html] view
plaincopy

<repositories>

<repository>

<id>JBoss repository</id>

<url>http://repository.jboss.org/nexus/content/groups/public/</url>

</repository>

</repositories>

<properties>

<spring.version>3.0.5.RELEASE</spring.version>

</properties>

<dependencies>

<!-- Spring 3 dependencies -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-core</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-web</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc</artifactId>

<version>${spring.version}</version>

</dependency>

<!-- Hibernate Validator -->

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-validator</artifactId>

<version>4.2.0.Final</version>

</dependency>

</dependencies>

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

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

[java] view
plaincopy

@NotEmpty(message="名字不能为空")

private String name;

@NotEmpty(message="email不能为空")

@Email(message="email格式不合法")

private String email;

[java] view
plaincopy

4)在controller中使用@valid 和BindingResult :

[java] view
plaincopy

<span style="font-size:18px;">@RequestMapping(value="/test")

@ResponseBody

private User test(@Valid User u,BindingResultresult){

if(result.hasErrors()){//这个是spring validation校验后返回的结果对象

//如果校验失败,你要做什么事情

String code = result.getFieldError().getCode();//验证出错的那个类型名称 比如NotEmpty

result.getFieldError().getDefaultMessage());//出错的信息

return m;

}else{

return null;

}

}</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

Spring JSR303 validation
documentation spring帮助文档
JSR303 bean validation
Hibernate Validator
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: