对于Sun最新发布的Java EE 6平台,过去已经陆续介绍了平台的主要目标,以及三大新技术中的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. } |
@NotNull注解指定了注解元素addressline1绝不能为空,@Size注解指定注解元素addressline1和addressline2决不能大于指定的长度(30个字符)。
验证Address对象时,addressline1的值传递给为@NotNull约束定义的验证类,同时还要传递给为@Size约束定义的验证类,addressline2的值也要传递给为@Size约束定义的验证类。
TT SOA编辑推荐:Eclipse应用技术
@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. } |
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. } |
Order对象验证后,Address对象和对象图中关联的对象也被验证。
为了满足在应用程序各层之间共享相同的验证集,Java EE 6平台整合了Bean验证。例如,表示层技术,如JSF,以及企业级技术,如JPA,都可以通过Bean验证框架访问约束定义和验证器,你不再需要在多个地方指定约束。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
翻译
相关推荐
-
Java云企业版
Java EE(以前叫做Java 2平台,企业版)是一个为支持企业级应用开发的而设计的平台。该平台提供标准化、模块化组件。各种应用程序自动化动作用来保证多层应用的创建和实现。
-
红帽的PaaS平台OpenShift支持Java EE 6
红帽公司刚对其旗下的PaaS(Platform-as-a-Service)平台——OpenShift做了改进,增加对Java EE 6的支持。这使得OpenShift成为第一个支持Jaav EE 6的PaaS解决方案平台。
-
甲骨文扩展对Java和开源开发者社区的承诺支持
为展现甲骨文是开发者、管理员和架构师首选技术和平台的领先供应商,甲骨文今天在2010旧金山全球大会上宣布,Oracle技术网(OTN)已经拥有超过1000万的注册用户。
-
Apache发布首个Tomcat 7版本
当地时间2010年6月29日,Apache基金会发布了Tomcat 7的首个版本。在RC4发布后不久,就传出Tomcat 7将偷跑的消息,之后Tomcat 7.0的官方文档在下载发布……