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

Java EE 6数据验证新框架:Bean验证

阅读更多
对于Sun最新发布的Java EE 6平台,过去我们已经陆续介绍了平台的主要目标,以及三大新技术中的JAX-RS以及上下文和依赖注入。本文介绍第三个技术:Bean验证。
  验证数据是应用程序生命周期中一个常见的任务,例如,在应用程序的表示层,你可能想验证用户在文本框中输入的字符数最多不超过20个,或者想验证用户在数字字段输入的字符只能是数字。

  开发人员在应用程序的各层中通常使用相同的验证逻辑,或者将验证逻辑放在数据模型中。

  Bean验证(JSR 303)使验证变得更简单了,减少了重复,错误和凌乱,Bean验证提供了一个标准的验证框架,在框架中相同的验证集可以在应用程序的所有层之间共享。

  Bean验证提供了一个框架验证遵循JavaBean规范编写的Java类,你可以使用注解指定一个JavaBean上的约束,你可以注解一个JavaBean类、字段或属性,你也可以通过XML描述符扩展或覆盖这些约束,验证类验证每个约束时,你要指定那个验证类用于给定的约束类型。

  例如,下面是通过Bean验证注解声明一些约束的类的一部分代码:

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绝不能为空,@Size注解指定注解元素addressline1和addressline2决不能大于指定的长度(30个字符)。

  验证Address对象时,addressline1的值传递给为@NotNull约束定义的验证类,同时还要传递给为@Size约束定义的验证类,addressline2的值也要传递给为@Size约束定义的验证类。

  @NotNull 和@Size约束内置于Bean验证框架中,因此你不需要为它们定义验证类,但你可以在内置约束上添加自己的约束,那时就需要定义自己的验证类了。例如,你可以定义如下的@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 addressline 3;
         public String getZipCode() {
        return zipCode;
     }
     public void setZipCode(String zipCode) {
       this.zipCode = zipCode;
     }
           ...
     }
  Address对象验证后,addressline3的值传递给ZipcodeValidator类进行验证,注意约束定义包括另一个约束:@Size(min=5, max=5),这意味着由@ZipCode注解注解的元素必须恰好是5个字符,除了执行ZipcodeValidator进行主要的约束检查外,需要再次使用这个约束对元素进行验证。Bean验证允许你创建一个由其它约束组成的约束,还要注意约束定义了一个错误消息,如果验证检查约束失败就返回这个错误消息,这里的错误消息是“Wrong zipcode”。

  你也可以使用Bean验证验证一个完整的对象图(object graph),一个对象图是由其它对象组成的一个对象,如果你在对象图的根对象上指定@Valid注解,它会指引相关的验证器递归验证对象图中的关联对象,如:

public class Order {
         @OrderNumber private String orderNumber;
         @Valid @NotNull private Address delivery;
     }  
  Order对象验证后,Address对象和对象图中关联的对象也被验证。

  为了满足在应用程序各层之间共享相同的验证集,Java EE 6平台整合了Bean验证。例如,表示层技术,如JSF,以及企业级技术,如JPA,都可以通过Bean验证框架访问约束定义和验证器,你不再需要在多个地方指定约束。
分享到:
评论

相关推荐

    基于java反射的验证框架

    例如,Hibernate Validator、JSR 303/349 Bean Validation等都是Java中常用的验证框架。它们使用注解来定义验证规则,然后通过反射机制在运行时检查对象的属性是否符合这些规则。 1. 注解驱动验证:在字段或方法上...

    The Java EE 6 Tutorial

    Java EE 6作为企业级应用开发的标准框架,提供了丰富的API和服务,用于构建可扩展、高性能、安全的企业级应用。 ### Java EE 6的关键特性 1. **简化开发**:Java EE 6引入了简化API,如JSR 315 CDI(Contexts and ...

    Java EE 6 DOC API (html版,英文完整)

    这个API文档提供了全面的技术规范和接口参考,是开发者理解和使用Java EE 6框架的重要参考资料。以下是该文档中包含的一些核心知识点: 1. **Servlet 3.0**:Java EE 6引入了Servlet 3.0规范,它增强了Servlet的可...

    Java EE Web编程(Eclipse 平台)

    Java EE,全称为Java Platform, Enterprise Edition,是Java平台针对企业级应用开发的规范。它提供了构建分布式、多层的企业级应用程序所需的框架和服务。在Eclipse平台上进行Java EE Web编程,意味着开发者可以利用...

    Beginning Java EE 7.pdf

    - **内容概要**:介绍了 Java EE 7 的新特性和改进之处,以及这些特性如何帮助开发者更高效地开发企业应用。 ##### 第2章:上下文与依赖注入 - **关键技术**:CDI 规范,包括 Bean 的管理、依赖注入等。 - **应用...

    java ee基础使用教程

    Java EE(Java Platform, Enterprise Edition)是Java平台上用于构建企业级Web应用的框架集合,它提供了丰富的服务和组件,使得开发者能够快速开发出分布式、多层架构的应用程序。本教程由知名讲师郑阿奇编著,旨在...

    精通Java EE:精通Java EE 整合应用案例\源代码\源代码2-9章.

    2. **JavaServer Faces (JSF)**:JSF是Java EE提供的一种声明式UI框架,简化了用户界面的创建。了解JSF组件模型、事件处理和转换验证机制是必要的。 3. **Java Persistence API (JPA) 和 Hibernate**:JPA是Java EE...

    Java_EE_6规范中文版附英文对照.rar

    8. **统一的验证框架(JSR 303)**:Bean Validation 提供了一种标准的方式来验证业务对象,简化了数据校验的实现。 9. **Web服务体系结构(WS-Security)**:Java EE 6支持Web服务安全标准,如WS-Security,确保...

    javaEE6.zip

    5. **bean-validator.jar**: 这可能是Hibernate Validator的实现,它是Java Bean Validation规范的参考实现,提供了数据验证的能力,可以在字段级别或整个对象层次上进行验证。 6. **javax.persistence.jar**: 包含...

    Java EE 6 标准与规范(中文版)

    Java EE 6 的安全性框架提供了一套完整的安全机制,支持身份验证和授权。 **2.2 一个简单的例子** 示例展示了如何使用Java EE 6的安全性框架来保护Web应用程序的特定部分。 **2.3 安全体系结构** - **身份验证**...

    javaEE6jar包

    Java EE 6是这个平台的一个重要版本,发布于2009年,它带来了许多新特性和改进,旨在简化开发流程并提高开发效率。以下是对Java EE 6 jar包及其包含的组件和功能的详细解释: 1. **Java Persistence API (JPA 2.0)*...

    腾科Java EE培训教材:框架技术之spring(学生版)1

    腾科Java EE培训教材——框架技术之Spring(学生版)1 Spring框架是Java开发中的一个核心组件,尤其在企业级应用开发中占据着举足轻重的地位。本教材主要针对初学者,深入浅出地介绍了Spring框架的基础知识和关键...

    Java EE 6 规范中文版

    - Bean Validation:提供数据验证框架,确保输入数据的有效性。 总之,Java EE 6规范中文版详尽地阐述了Java在企业级开发中的各种技术和规范,是学习和开发Java EE应用的重要参考资料。通过深入理解和应用这些规范...

    Java.EE.7.Essentials

    Java EE 7是在2013年推出的Java企业级计算平台的标准版本,它在Java EE 6的基础上做了大量的增强和改进,以适应现代云计算和大数据处理的需求。 首先,Java EE 7为开发者提供了更加模块化和轻量级的开发方式。平台...

    JavaEE6 Bean Validation提供了实体验证元数据模型与API

    Java EE 6中的Bean Validation(JSR 303)作为一项核心功能,为开发者提供了一个强大的实体验证框架。该框架定义了一种元数据模型以及一个API来支持实体验证的需求。在Java EE 6发布之前,开发者通常需要在不同的...

    Java EE6 规范文档

    2. **Contexts and Dependency Injection for the Java EE Platform (CDI)**:CDI是一种新的依赖注入框架,提供了一种更简单、更灵活的方式来管理和注入Java EE组件的依赖关系。它还支持事件通知和上下文管理,使得...

    The Java EE 7 tutorial

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

    JAVA-EE-Review.zip_JAVA EE_JAVA EE

    6. **JPA(Java Persistence API)**:JPA为数据持久化提供了一个规范,简化了对象关系映射(ORM)。 7. **JNDI(Java Naming and Directory Interface)**:JNDI提供了一个接口,用于查找和管理分布式环境中的资源...

    精通Java EE:精通Java EE 整合应用案例随书光盘案例数据库部分

    Java EE的核心在于提供了一整套企业级应用的开发框架和服务,包括但不限于: 1. **Servlet和JSP**:Servlet是Java编写的应用程序,用于处理HTTP请求,而JSP(Java Server Pages)则是一种动态网页技术,允许在HTML...

    Beginning Java™ EE 6 Platform with GlassFish™ 3 Second Edition

    ### 关于《Beginning Java™ EE 6 Platform with GlassFish™ 3 第二版》的知识点概览 本书《Beginning Java™ EE 6 Platform with GlassFish™ 3 第二版》是一本面向Java初学者和进阶者的教程书籍,旨在帮助读者...

Global site tag (gtag.js) - Google Analytics