这是一个规范,定义了一些元素来进行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中配置
<mvc:annotation-driven />
2)相关jar包,如果用的是maven
[html]
<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]
@NotEmpty(message="名字不能为空")
private String name;
@NotEmpty(message="email不能为空")
@Email(message="email格式不合法")
private String email;
[java]
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标签:
<form:errors path="*" cssClass="errorblock" element="div" />
最后,我使用的是spring mvc+ mybatis, hibernate validation是可独立的一块和orm并无太大关系。 ibatis在validation规范并没有实现。