对于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验证框架访问约束定义和验证器,你不再需要在多个地方指定约束。
分享到:
相关推荐
例如,Hibernate Validator、JSR 303/349 Bean Validation等都是Java中常用的验证框架。它们使用注解来定义验证规则,然后通过反射机制在运行时检查对象的属性是否符合这些规则。 1. 注解驱动验证:在字段或方法上...
Java EE 6作为企业级应用开发的标准框架,提供了丰富的API和服务,用于构建可扩展、高性能、安全的企业级应用。 ### Java EE 6的关键特性 1. **简化开发**:Java EE 6引入了简化API,如JSR 315 CDI(Contexts and ...
这个API文档提供了全面的技术规范和接口参考,是开发者理解和使用Java EE 6框架的重要参考资料。以下是该文档中包含的一些核心知识点: 1. **Servlet 3.0**:Java EE 6引入了Servlet 3.0规范,它增强了Servlet的可...
Java EE,全称为Java Platform, Enterprise Edition,是Java平台针对企业级应用开发的规范。它提供了构建分布式、多层的企业级应用程序所需的框架和服务。在Eclipse平台上进行Java EE Web编程,意味着开发者可以利用...
- **内容概要**:介绍了 Java EE 7 的新特性和改进之处,以及这些特性如何帮助开发者更高效地开发企业应用。 ##### 第2章:上下文与依赖注入 - **关键技术**:CDI 规范,包括 Bean 的管理、依赖注入等。 - **应用...
Java EE(Java Platform, Enterprise Edition)是Java平台上用于构建企业级Web应用的框架集合,它提供了丰富的服务和组件,使得开发者能够快速开发出分布式、多层架构的应用程序。本教程由知名讲师郑阿奇编著,旨在...
2. **JavaServer Faces (JSF)**:JSF是Java EE提供的一种声明式UI框架,简化了用户界面的创建。了解JSF组件模型、事件处理和转换验证机制是必要的。 3. **Java Persistence API (JPA) 和 Hibernate**:JPA是Java EE...
8. **统一的验证框架(JSR 303)**:Bean Validation 提供了一种标准的方式来验证业务对象,简化了数据校验的实现。 9. **Web服务体系结构(WS-Security)**:Java EE 6支持Web服务安全标准,如WS-Security,确保...
5. **bean-validator.jar**: 这可能是Hibernate Validator的实现,它是Java Bean Validation规范的参考实现,提供了数据验证的能力,可以在字段级别或整个对象层次上进行验证。 6. **javax.persistence.jar**: 包含...
Java EE 6 的安全性框架提供了一套完整的安全机制,支持身份验证和授权。 **2.2 一个简单的例子** 示例展示了如何使用Java EE 6的安全性框架来保护Web应用程序的特定部分。 **2.3 安全体系结构** - **身份验证**...
Java EE 6是这个平台的一个重要版本,发布于2009年,它带来了许多新特性和改进,旨在简化开发流程并提高开发效率。以下是对Java EE 6 jar包及其包含的组件和功能的详细解释: 1. **Java Persistence API (JPA 2.0)*...
腾科Java EE培训教材——框架技术之Spring(学生版)1 Spring框架是Java开发中的一个核心组件,尤其在企业级应用开发中占据着举足轻重的地位。本教材主要针对初学者,深入浅出地介绍了Spring框架的基础知识和关键...
- Bean Validation:提供数据验证框架,确保输入数据的有效性。 总之,Java EE 6规范中文版详尽地阐述了Java在企业级开发中的各种技术和规范,是学习和开发Java EE应用的重要参考资料。通过深入理解和应用这些规范...
Java EE 7是在2013年推出的Java企业级计算平台的标准版本,它在Java EE 6的基础上做了大量的增强和改进,以适应现代云计算和大数据处理的需求。 首先,Java EE 7为开发者提供了更加模块化和轻量级的开发方式。平台...
Java EE 6中的Bean Validation(JSR 303)作为一项核心功能,为开发者提供了一个强大的实体验证框架。该框架定义了一种元数据模型以及一个API来支持实体验证的需求。在Java EE 6发布之前,开发者通常需要在不同的...
2. **Contexts and Dependency Injection for the Java EE Platform (CDI)**:CDI是一种新的依赖注入框架,提供了一种更简单、更灵活的方式来管理和注入Java EE组件的依赖关系。它还支持事件通知和上下文管理,使得...
根据给定的文件信息,我们将深入探讨与Java EE 7教程相关的关键知识点,这将包括对Java EE平台的理解、其核心组件以及版本7所引入的新特性。 ### Java EE(Java Platform, Enterprise Edition)概述 Java EE是Java...
6. **JPA(Java Persistence API)**:JPA为数据持久化提供了一个规范,简化了对象关系映射(ORM)。 7. **JNDI(Java Naming and Directory Interface)**:JNDI提供了一个接口,用于查找和管理分布式环境中的资源...
Java EE的核心在于提供了一整套企业级应用的开发框架和服务,包括但不限于: 1. **Servlet和JSP**:Servlet是Java编写的应用程序,用于处理HTTP请求,而JSP(Java Server Pages)则是一种动态网页技术,允许在HTML...
### 关于《Beginning Java™ EE 6 Platform with GlassFish™ 3 第二版》的知识点概览 本书《Beginning Java™ EE 6 Platform with GlassFish™ 3 第二版》是一本面向Java初学者和进阶者的教程书籍,旨在帮助读者...