Java EE6 核心特徵:Bean Validation 解析

來源:互聯網
上載者:User

Bean Validation(JSR 303)——Java
EE
6的一個核心特性,它為實體驗證定義了一個中繼資料模型和API。其預設的中繼資料源是註解,但開發人員可以通過XML描述符對其進行擴充。
Validation API並不依賴特定的應用程式層或是編程模型,這樣同一套驗證可由應用的所有層共用。它還提供了通過擴充Validation
API來增加客戶化驗證約束的機制以及查詢約束中繼資料倉庫的手段。

在JEE6的Bean
Validation出現之前,開發人員不得不在展示層架構、業務層以及持久層中編寫驗證規則以保證這些規則的同步性,但這麼做非常浪費時間而且極易出錯。
Bean Validation是通過約束實現的,這些約束以註解的形式出現,註解可以放在JavaBean(如backing
bean)的屬性、方法或是類上面。 
約束既可以是內建的註解(位於javax.validation.constraints包下面),也可以由使用者定義。一些常用的內建註解列舉如下:

  • Min:被@Min所註解的元素必須是個數字,其值要大於或等於給定的最小值。
  • Max:被@Max所註解的元素必須是個數字,其值要小於或等於給定的最大值。
  • Size:@Size表示被註解的元素必須位於給定的最小值和最大值之間。支援Size驗證的資料類型有String、
    Collection(計算集合的大小)、Map以及數組。
  • NotNull:@NotNull確保被註解的元素不能為null。
  • Null:@Null確保被註解的元素一定為null。
  • Pattern:@Pattern確保被註解的元素(String)一定會匹配給定的Java

    則運算式。

下面的範例程式碼中通過Bean Validation註解聲明了一些約束:

Java
代碼
  1. public
     
    class
     Address {  
  2.        @NotNull
     
    @Size
    (max=
    30
    )  
  3.        private
     String addressline1;  
  4.   
  5.        @Size
    (max=
    30
    )  
  6.        private
     String addressline2;  
  7.   
  8.        public
     String getAddressline1() {  
  9.           return
     addressline1;  
  10.        }  
  11.   
  12.        public
     
    void
     setAddressline1(String addressline1) {  
  13.           this
    .addressline1 = addressline1;  
  14.        }  
  15. }  
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不能為null;@Size指定被註解的元素addressline1和
addressline2不能超過給定的最大值,即30個字元。

在驗證Address對象時,addressline1的值被傳遞到針對@NotNull約束的驗證類以及針對@Size約束的驗證類中,而
addressline2的值被傳遞到針對@Size約束的驗證類中,由相關的驗證類進行驗證。

如下代碼自訂了一個名為ZipCode的約束:

Java
代碼
  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. }  
@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用在類、屬性或是方法上,就像其他約束一樣。

Java
代碼
  1. public
     
    class
     Address {  
  2.        @ZipCode
      
  3.        private
     String zipCode;  
  4.   
  5.        public
     String getZipCode() {  
  6.           return
     zipCode;  
  7.        }  
  8.   
  9.        public
     
    void
     setZipCode(String zipCode) {  
  10.           this
    .zipCode = zipCode;  
  11.        }  
  12. }  
public class Address {       @ZipCode       private String zipCode;       public String getZipCode() {          return zipCode;       }       public void setZipCode(String zipCode) {          this.zipCode = zipCode;       }}

Validation API

開發人員可以藉助於Validation API以編程的方式驗證JavaBean。Bean Validation
API的預設包是javax.validation。下面對該包中的一些類進行說明:

ConstraintValidator
:這是一個介面,具體的約束驗證類需要實現該介面。該介面定義了相關
的邏輯以驗證給定物件類型中的約束。

Validator
:Validahttp://java
.sun.com/javaee
/6/docs/api/index.html?javax/validation/Validator.htmltor介面持有對象驗證圖的契約。該接
口的實現必須是安全執行緒的。

ConstraintViolation
:ConstraintViolation介面表示給定bean上的
約束驗證失敗,它公開了約束違背上下文以及描述該違背情況的資訊。

ValidationException
:如果在驗證過程中出現了某些不可恢複的錯誤就會拋出
ValidationException異常。某些情況下可以指定該異常,如不合法的分組(group)定義、不合法的約束定義以及不合法的約束聲明等
等。

約束中繼資料請求API

Bean Validation規範提供了查詢約束倉庫的手段。該API主要用於工具支援和與其他架構、庫以及JSR的整合。Bean
Validation規範旨在為對象約束提供一個驗證引擎和中繼資料倉庫。需要進行約束定義、驗證和中繼資料的架構(Java
EE或Java

SE)可以利用Bean Validation規範完成這些功能,從應用或是基礎設施的角度來看,這麼做可以避免不必要的重複工作。

Bean Validation已經整合到了JSF 2.0和JPA 2.0中。在JSF中可以將表單輸入欄位與域對象的屬性綁定起來。JSF
2和Bean Validation可以判斷出綁定的是哪個屬性並執行與之相關的驗證,還會將約束違背的資訊顯示給使用者。

Hibernate Validator 4是Bean
Validation規範的參考實現架構,其最新版增加了不少新特性,如分組驗證、與JPA 2和JSF 2的自然整合以及擴充的註解集等等。

 

轉自:http://www.javaeye.com/news/15265

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.