`

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

    博客分类:
  • Java
阅读更多
【51CTO精选译文】对于Sun最新发布的Java EE 6平台,过去51CTO已经陆续介绍了平台的主要目标,以及三大新技术中的JAX-RS以及上下文和依赖注入。本文介绍第三个技术:Bean验证。

验证数据是应用程序生命周期中一个常见的任务,例如,在应用程序的表示层,你可能想验证用户在文本框中输入的字符数最多不超过20个,或者想验证用户在数字字段输入的字符只能是数字。

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

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

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

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

   1. public class Address { 
   2.        @NotNull @Size(max=30) 
   3.        private String addressline1; 
   4. 
   5.        @Size(max=30) 
   6.        private String addressline2; 
   7. 
   8.         ... 
   9. 
  10.        public String getAddressline1() { 
  11.       return addressline1; 
  12.        } 
  13. 
  14.        public void setAddressline1(String addressline1) { 
  15.       this.addressline1 = addressline1; 
  16.        } 
  17. 
  18.         ... 
  19.    } 
  20. 

@NotNull注解指定了注解元素addressline1绝不能为空,@Size注解指定注解元素addressline1和addressline2决不能大于指定的长度(30个字符)。

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

51CTO编辑推荐:Java EE 6平台指南

@NotNull 和@Size约束内置于Bean验证框架中,因此你不需要为它们定义验证类,但你可以在内置约束上添加自己的约束,那时就需要定义自己的验证类了。例如,你可以定义如下的@ZipCode约束:

   1. @Size(min=5, max=5) 
   2.  @ConstraintValidator(ZipcodeValidator.class) 
   3.  @Documented
   4.  @Target({ANNOTATION_TYPE, METHOD, FIELD}) 
   5.  @Retention(RUNTIME) 
   6.  public @interface ZipCode { 
   7.      String message() default "Wrong zipcode"; 
   8.      String[] groups() default {}; 
   9.  } 

然后你可以在类、字段或属性上象其它约束定义那样定义@ZipCode约束,如:

   1. public class Address { 
   2.         ... 
   3. 
   4.        @ZipCode
   5.        private String addressline 3; 
   6. 
   7.        public String getZipCode() { 
   8.       return zipCode; 
   9.    } 
  10. 
  11.    public void setZipCode(String zipCode) { 
  12.       this.zipCode = zipCode; 
  13.    } 
  14. 
  15.         ... 
  16.    } 
  17. 

    * 从Java EE 6最终草案看Java企业级开发的..
    * Java EE 6总览:平台的主要目标
    * Java EE 6引入的三大新技术之JAX-RS
    * 面向Java EE 6平台的上下文和依赖性注入
    * 九大因素让Java EE 6成为你的省钱法宝

Address对象验证后,addressline3的值传递给ZipcodeValidator类进行验证,注意约束定义包括另一个约束:@Size(min=5, max=5),这意味着由@ZipCode注解注解的元素必须恰好是5个字符,除了执行ZipcodeValidator进行主要的约束检查外,需要再次使用这个约束对元素进行验证。Bean验证允许你创建一个由其它约束组成的约束,还要注意约束定义了一个错误消息,如果验证检查约束失败就返回这个错误消息,这里的错误消息是“Wrong zipcode”。

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

   1. public class Order { 
   2.        @OrderNumber private String orderNumber; 
   3.        @Valid @NotNull private Address delivery; 
   4.    } 
   5. 

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...

    javaEE6.zip

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

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

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

    javaEE6jar包

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

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

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

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

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

    Java.EE.7.Essentials

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

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

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

    The Java EE 7 tutorial

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

    Java EE6 规范文档

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

    JAVA-EE-Review.zip_JAVA EE_JAVA EE

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

    hibernate验证框架学习

    **Hibernate Validator** 是一个流行的 Java 验证框架,它实现了 **JSR 349**(即 Java Bean Validation API)规范,提供了强大的验证功能,帮助开发者确保应用程序中的数据符合预定的规则。本文档将详细介绍 **...

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

    Java EE,全称为Java Platform, Enterprise Edition,是Java平台针对企业级应用开发的规范集,由Oracle公司主导维护。本书“精通Java EE”显然旨在帮助开发者深入理解和掌握Java EE技术,通过整合应用案例来增强实践...

Global site tag (gtag.js) - Google Analytics