Java EE 6核心特征:Bean Validation解析

日期: 2010-03-21 作者:Srini Penchikala 来源:TechTarget中国 英文

  Bean Validation是Java EE 6数据验证新框架,Validation API并不依赖特定的应用层或是编程模型,这样同一套验证可由应用的所有层共享。它还提供了通过扩展Validation API来增加客户化验证约束的机制以及查询约束元数据仓库的手段。

  在Java EE 6的Bean Validation出现之前,开发者不得不在表示层框架、业务层以及持久层中编写验证规则以保证这些规则的同步性,但这么做非常浪费时间而且极易出错。Bean Validation是通过约束实现的,这些约束以注解的形式出现,注解可以放在JavaBean(如backing bean)的属性、方法或是类上面。约束既可以是内建的注解(位于javax.validation.constraints包下面),也可以由用户定义。一些常用的内建注解列举如下:

  ◆Min:被@Min所注解的元素必须是个数字,其值要大于或等于给定的最小值。

  ◆Max:被@Max所注解的元素必须是个数字,其值要小于或等于给定的最大值。

  ◆Size:@Size表示被注解的元素必须位于给定的最小值和最大值之间。支持Size验证的数据类型有String、Collection(计算集合的大小)、Map以及数组。

  ◆NotNull:@NotNull确保被注解的元素不能为null。

  ◆Null:@Null确保被注解的元素一定为null。

  ◆Pattern:@Pattern确保被注解的元素(String)一定会匹配给定的Java正则表达式。

  代码中通过Bean Validation注解声明了一些约束:

以下是引用片段:
public class Address {
         @NotNull @Size(max=30)
         private String addressline1;
          @Size(max=30)
         private String addressline2;
          public String getAddressline1() {
            return addressline1;
         }
          public void setAddressline1(String addressline1) {
            this.addressline1 = addressline1;
         }
     } 

  @NotNull指定被注解的元素addressline1不能为null;@Size指定被注解的元素addressline1和addressline2不能超过给定的最大值,即30个字符。

  在验证Address对象时,addressline1的值被传递到针对@NotNull约束的验证类以及针对@Size约束的验证类中,而addressline2的值被传递到针对@Size约束的验证类中,由相关的验证类进行验证。如下代码自定义了一个名为ZipCode的约束:

以下是引用片段:
@Size(min=5, max=5)
     @ConstraintValidator(ZipcodeValidator.class)
     @Documented
     @Target({ANNOTATION_TYPE, METHOD, FIELD})
     @Retention(RUNTIME)
     public @interface ZipCode {
         String message() default “Wrong zipcode”;
         String[] groups() default {};
     } 

  可以将@ZipCode用在类、属性或是方法上,就像其他约束一样。

以下是引用片段:
public class Address {
         @ZipCode
         private String zipCode;
          public String getZipCode() {
            return zipCode;
         }
          public void setZipCode(String zipCode) {
            this.zipCode = zipCode;
         }
     } 

  Validation API

  开发者可以借助于Validation API以编程的方式验证JavaBean。Bean Validation API的默认包是javax.validation。下面对该包中的一些类进行说明:

  ConstraintValidator:这是一个接口,具体的约束验证类需要实现该接口。该接口定义了相关的逻辑以验证给定对象类型中的约束。

  Validator:Validahttp://java.sun.com/javaee/6/docs/api/index.html?javax/validation/Validator.htmltor接口持有对象验证图的契约。该接口的实现必须是线程安全的。

  ConstraintViolation:ConstraintViolation接口表示给定bean上的约束验证失败,它公开了约束违背上下文以及描述该违背情况的信息。

  ValidationException:如果在验证过程中出现了某些不可恢复的错误就会抛出ValidationException异常。某些情况下可以指定该异常,如不合法的分组(group)定义、不合法的约束定义以及不合法的约束声明等等。

  约束元数据请求API

  Bean Validation规范提供了查询约束仓库的手段。该API主要用于工具支持和与其他框架、库以及JSR的集成。Bean Validation规范旨在为对象约束提供一个验证引擎和元数据仓库。需要进行约束定义、验证和元数据的框架(Java EE或Java SE)可以利用Bean Validation规范完成这些功能,从应用或是基础设施的角度来看,这么做可以避免不必要的重复工作。

  Bean Validation已经集成到了JSF 2.0和JPA 2.0中。在JSF中可以将表单输入域与域对象的属性绑定起来。JSF 2和Bean Validation可以判断出绑定的是哪个属性并执行与之相关的验证,还会将约束违背的信息显示给用户。Hibernate Validator 4是Bean Validation规范的参考实现框架,其最新版增加了不少新特性,如分组验证、与JPA 2和JSF 2的自然集成以及扩展的注解集等等。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐

  • Java云企业版

    Java EE(以前叫做Java 2平台,企业版)是一个为支持企业级应用开发的而设计的平台。该平台提供标准化、模块化组件。各种应用程序自动化动作用来保证多层应用的创建和实现。

  • 红帽的PaaS平台OpenShift支持Java EE 6

    红帽公司刚对其旗下的PaaS(Platform-as-a-Service)平台——OpenShift做了改进,增加对Java EE 6的支持。这使得OpenShift成为第一个支持Jaav EE 6的PaaS解决方案平台。

  • 甲骨文扩展对Java和开源开发者社区的承诺支持

    为展现甲骨文是开发者、管理员和架构师首选技术和平台的领先供应商,甲骨文今天在2010旧金山全球大会上宣布,Oracle技术网(OTN)已经拥有超过1000万的注册用户。

  • Apache发布首个Tomcat 7版本

    当地时间2010年6月29日,Apache基金会发布了Tomcat 7的首个版本。在RC4发布后不久,就传出Tomcat 7将偷跑的消息,之后Tomcat 7.0的官方文档在下载发布……