日期:2014-05-16 浏览次数:20442 次
原文链接:http://www.ibm.com/developerworks/cn/java/j-lo-jsr303/index.html
?
?
关于 Bean Validation
在任何时候,当你要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情。应用程序必须通过某种手段来确保输入进来的数据从语 义上来讲是正确的。在通常的情况下,应用程序是分层的,不同的层由不同的开发人员来完成。很多时候同样的数据验证逻辑会出现在不同的层,这样就会导致代码 冗余和一些管理的问题,比如说语义的一致性等。为了避免这样的情况发生,最好是将验证逻辑与相应的域模型进行绑定。
Bean Validation 为 JavaBean 验证定义了相应的元数据模型和 API。缺省的元数据是 Java
Annotations,通过使用 XML 可以对原有的元数据信息进行覆盖和扩展。在应用程序中,通过使用 Bean Validation
或是你自己定义的 constraint,例如 @NotNull
, @Max
, @ZipCode
,
就可以确保数据模型(JavaBean)的正确性。constraint 可以附加到字段,getter
方法,类或者接口上面。对于一些特定的需求,用户可以很容易的开发定制化的 constraint。Bean Validation
是一个运行时的数据验证框架,在验证之后验证的错误信息会被马上返回。
下载 JSR 303 – Bean Validation 规范 http://jcp.org/en/jsr/detail?id=303
Hibernate Validator 是 Bean Validation 的参考实现 . Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint。如果想了解更多有关 Hibernate Validator 的信息,请查看 http://www.hibernate.org/subprojects/validator.html
回页首
Bean Validation 中的 constraint
表 1. Bean Validation 中内置的 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)
|
被注释的元素必须符合指定的正则表达式 |
表 2. Hibernate Validator 附加的 constraint
@Email
|
被注释的元素必须是电子邮箱地址 |
@Length
|
被注释的字符串的大小必须在指定的范围内 |
@NotEmpty
|
被注释的字符串的必须非空 |
@Range
|
被注释的元素必须在合适的范围内 |
?
一个 constraint 通常由 annotation 和相应的 constraint validator 组成,它们是一对多的关系。也就是说可以有多个 constraint validator 对应一个 annotation。在运行时,Bean Validation 框架本身会根据被注释元素的类型来选择合适的 constraint validator 对数据进行验证。
有些时候,在用户的应用中需要一些更复杂的 constraint。Bean Validation 提供扩展 constraint 的机制。可以通过两种方法去实现,一种是组合现有的 constraint 来生成一个更复杂的 constraint,另外一种是开发一个全新的 constraint。
回页首
创建一个包含验证逻辑的简单应用(基于 JSP)
在本文中,通过创建一个虚构的订单管理系统(基于 JSP 的 web 应用)来演示如何在 Java 开发过程中应用 Bean Validation。该简化的系统可以让用户创建和检索订单。
系统设计和运用的技术
图 1. 系统架构
图 1 是报表管理系统的结构图,是典型的 MVC(Model-Vie