`
yingfang05
  • 浏览: 122770 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

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

阅读更多
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的自然集成以及扩展的注解集等等。
分享到:
评论

相关推荐

    Beginning Java EE 7.pdf

    ### Java EE 7 关键...通过上述知识点的详细解析,我们可以看出,《Beginning Java EE 7》这本书不仅全面覆盖了 Java EE 7 的各个方面,还提供了丰富的实例和指导,非常适合希望深入学习 Java EE 7 技术栈的开发者。

    java ee结构解析

    Java EE的核心特征之一是Bean Validation框架,这是Java EE 6引入的新功能。Bean Validation允许开发者通过注解在JavaBean的属性、方法或类上定义验证约束,确保数据的正确性。这些约束可以是预定义的,也可以自定义...

    The Java EE 7 tutorial

    根据给定的文件信息,我们将深入探讨与Java EE 7教程相关的关键知识点,这将包括对Java EE平台的理解、其核心组件以及版本7所引入的新特性。 ### Java EE(Java Platform, Enterprise Edition)概述 Java EE是Java...

    JavaOne2009大会资料-Core Technology: Java EE

    TS-5055-Java Platform, Enterprise Edition 5 and 6: Eclipse and NetBeans IDE Tooling Offering.pdf,这可能是关于使用Eclipse和NetBeans IDE进行Java EE 5和6开发的指南,展示了这两个流行IDE如何提供强大的...

    +Flex+集成到+Java+EE+应用程序的最佳实践(完整源代码)

    资源简介现有的 Java EE 应用 假定我们已经拥有了一个管理雇员信息的 Java EE 应用,名为 EmployeeMgmt-Server,结构如 图 1 所示: 图 1. Java EE 工程结构 这是一个典型的 Java EE 应用,使用了流行的 ...

    Hibernate4.0

    在Java EE 6中,Bean Validation成为了一项核心特性,它提供了一种统一的方式来进行实体对象的有效性检查。然而,在Hibernate 4.0中,如果不正确地处理Bean Validation的集成,可能会遇到一些问题。 默认情况下,...

    Bean Validator JSR303

    在Java EE和Spring等框架中,Bean Validation扮演着关键的角色,确保数据的完整性和一致性。 ### 1. JSR 303介绍 JSR 303全称为Java Specification Request 303,是Java Community Process(JCP)发布的一个关于...

    Java_EE8.docset.rar

    6. **JSR 365:Contexts and Dependency Injection (CDI) 2.0**:CDI 2.0改进了依赖注入的规范,增加了对JSR 346(Bean Validation 2.0)的支持,增强了异步处理和事件监听器的功能,提升了组件的生命周期管理。...

    基于java反射的验证框架

    Bean Validation是Java EE规范的一部分,它提供了一种标准的方式来定义和执行验证。使用它,开发者可以在模型类中添加注解,如@NotNull、@Size、@Pattern等,然后在验证时,通过Validator接口进行校验。 综上所述,...

    教师信息管理系统-java

    Spring是Java EE领域的核心框架,提供依赖注入(DI)和面向切面编程(AOP)等特性。在教师信息管理系统中,Spring可以管理系统中的各个组件,简化配置,提高代码的可测试性。同时,Spring MVC是Spring提供的Web MVC...

    JEE6 (JSR316) Final Draft.pdf

    6. **Bean Validation**:提供了一种声明式的验证机制,允许开发者定义复杂的业务规则,确保数据的完整性和正确性。 7. **批处理**:通过JSR 352定义了批处理操作的标准API,便于执行大型批处理任务。 ##### 技术...

    spring-3.1.0中文版api帮助文档

    - **Java EE 6敏捷性评估**:探讨Java EE 6是否真正达到了敏捷开发的标准。 - **具体与抽象之间的平衡**:分析Java EE 6如何在提供具体功能的同时保持高度的抽象性和可扩展性。 **1.2 Spring 3.1的架构价值挖掘** ...

    spring-frame-4-reference

    - **Java EE 6 和 7**:增加了对Java EE 6和7新特性的支持。 - **Groovy Bean Definition DSL**:引入了使用Groovy语言定义Bean配置的新方式。 - **核心容器改进**:包括对Bean作用域的增强、事件监听器的改进等。 -...

    javax.annotation-3.1.2.2-sources.jar.zip

    在Java EE 6及以上版本中,这个注解可以配合Bean Validation框架(如Hibernate Validator)来实现输入验证。 在javax.annotation-3.1.2.2-sources.jar中,我们可以找到这些注解的源代码,通过阅读源代码,我们可以...

Global site tag (gtag.js) - Google Analytics