【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验证框架访问约束定义和验证器,你不再需要在多个地方指定约束。
分享到:
相关推荐
第1章 Java EE的基本知识 1 1.1 Java EE的出现及其特点 1 1.2 Java EE的分层模型和平台组成 4 1.2.1 Java EE的分层模型 4 1.2.2 Java EE的结构变形 5 1.2.3 Java EE平台的组成 7 1.3 Java EE参与人员的...
本书讲解Java Web开发中的高级开发技术,包括企业级的开发技术EJB、各种Java EE的分布式开发技术、Java Web的各种开源技术与框架,这3部分内容层层递进,涵盖了Java EE开发中的各种分布式与业务核心技术。...
本书讲解Java Web开发中的高级开发技术,包括企业级的开发技术EJB、各种Java EE的分布式开发技术、Java Web的各种开源技术与框架,这3部分内容层层递进,涵盖了Java EE开发中的各种分布式与业务核心技术。...
本书讲解Java Web开发中的高级开发技术,包括企业级的开发技术EJB、各种Java EE的分布式开发技术、Java Web的各种开源技术与框架,这3部分内容层层递进,涵盖了Java EE开发中的各种分布式与业务核心技术。...
第二部分详细讲解了jsf ri、jta、jndi、rmi、jms、javamail、ejb 3的session bean、message driven bean、jpa、jax-ws 2、jaas等java ee知识,这部分知识以jsf+ejb 3+jpa整合开发为重点,通过使用netbeans ide工具...
JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,现在一共有两个规范:BeanValidation1.0(即JSR303)和BeanValidation1.1(即JSR349),主要用于对数据进行校验,确保输入进来的数据从语 义上来讲是正确的。...
本书讲解Java Web开发中的高级开发技术,包括企业级的开发技术EJB、各种Java EE的分布式开发技术、Java Web的各种开源技术与框架,这3部分内容层层递进,涵盖了Java EE开发中的各种分布式与业务核心技术。...
本书讲解Java Web开发中的高级开发技术,包括企业级的开发技术EJB、各种Java EE的分布式开发技术、Java Web的各种开源技术与框架,这3部分内容层层递进,涵盖了Java EE开发中的各种分布式与业务核心技术。...
本书讲解Java Web开发中的高级开发技术,包括企业级的开发技术EJB、各种Java EE的分布式开发技术、Java Web的各种开源技术与框架,这3部分内容层层递进,涵盖了Java EE开发中的各种分布式与业务核心技术。...
本书讲解Java Web开发中的高级开发技术,包括企业级的开发技术EJB、各种Java EE的分布式开发技术、Java Web的各种开源技术与框架,这3部分内容层层递进,涵盖了Java EE开发中的各种分布式与业务核心技术。...
本书讲解Java Web开发中的高级开发技术,包括企业级的开发技术EJB、各种Java EE的分布式开发技术、Java Web的各种开源技术与框架,这3部分内容层层递进,涵盖了Java EE开发中的各种分布式与业务核心技术。...
本书讲解Java Web开发中的高级开发技术,包括企业级的开发技术EJB、各种Java EE的分布式开发技术、Java Web的各种开源技术与框架,这3部分内容层层递进,涵盖了Java EE开发中的各种分布式与业务核心技术。...
本书讲解Java Web开发中的高级开发技术,包括企业级的开发技术EJB、各种Java EE的分布式开发技术、Java Web的各种开源技术与框架,这3部分内容层层递进,涵盖了Java EE开发中的各种分布式与业务核心技术。...
用于使jax-rs类具有事务范围验证:用于验证现有模型文件夹结构: Java| _ bean:用于容纳数据库外部模型和dto模型的软件包| _ config:包以重命名配置类| _ dto:数据传输对象类的软件包| _实体:所有类的包都映射到...
本书讲解Java Web开发中的高级开发技术,包括企业级的开发技术EJB、各种Java EE的分布式开发技术、Java Web的各种开源技术与框架,这3部分内容层层递进,涵盖了Java EE开发中的各种分布式与业务核心技术。...
不过,针对 Java EE 开发的服务器端应用,可以通过集成 BlazeDS,充分利用 AMF 协议并能轻易与 Flex 前端交换数据,这种方式是 Java EE 应用程序集成 Flex 的首选。 BlazeDS 是 Adobe LifeCycle Data Services 的...
-> Angular特征Java EE 8功能Bean验证2.0(alpha) CDI 2.0(alpha) JSONB Java EE 7功能Web套接字如何安装先决条件您需要maven,npm,git和应用程序服务器Java EE 该演示使用了一些仍在开发中的Java 8功能。...
不过,针对 Java EE 开发的服务器端应用,可以通过集成 BlazeDS,充分利用 AMF 协议并能轻易与 Flex 前端交换数据,这种方式是 Java EE 应用程序集成 Flex 的首选。 BlazeDS 是 Adobe LifeCycle Data Services 的...
Java 的 Web框架虽然各不相同,但基本也都是遵循特定的路数的:使用Servlet或者Filter拦截请求,使用MVC的思想设计架构,使用约定,XML或 Annotation实现配置,运用Java面向对象的特点,面向抽象实现请求和响应的...
17.6、验证框架 附录A:实用工具 18.1、JavaMail 18.1.1、James邮件服务器的下载及配置 18.1.2、JavaMail简介及配置 18.1.3、发送普通邮件 18.1.4、发送带附件的HTML风格邮件 18.2、操作Excel文件 ...