程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2EE >> Java EE 6數據驗證新框架:Bean驗證

Java EE 6數據驗證新框架:Bean驗證

編輯:J2EE

【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. @Size(max=30)
  5. private String addressline2;
  6. ...
  7. public String getAddressline1() {
  8. return addressline1;
  9. }
  10. public void setAddressline1(String addressline1) {
  11. this.addressline1 = addressline1;
  12. }
  13. ...
  14. }

@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. @ZipCode
  4. private String addressline 3;
  5. public String getZipCode() {
  6. return zipCode;
  7. }
  8. public void setZipCode(String zipCode) {
  9. this.zipCode = zipCode;
  10. }
  11. ...
  12. }

  • 從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. }

Order對象驗證後,Address對象和對象圖中關聯的對象也被驗證。

為了滿足在應用程序各層之間共享相同的驗證集,Java EE 6平台整合了Bean驗證。例如,表示層技術,如JSF,以及企業級技術,如JPA,都可以通過Bean驗證框架訪問約束定義和驗證器,你不再需要在多個地方指定約束。

原文:Introducing the Java EE 6 Platform

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved