搜尋
首頁Javajava教程Java API 開發中使用 Bean Validation 進行參數校驗

在 Java API 的開發中,參數校驗是一個非常重要的環節。使用 Bean Validation 框架可以方便地實現對參數的校驗,從而保證 API 的參數傳遞的合法性。本文將介紹 Bean Validation 的使用方法。

一、什麼是 Bean Validation?

Bean Validation 是 Java EE 6 規格中的一部分。它是一個基於註解的參數校驗框架,可以用於在方法、建構子、欄位和屬性等註解中加入校驗規則。這些註解可以幫助開發人員在程式碼編寫階段更好地預防輸入錯誤,並在執行時偵測和提示使用者輸入錯誤。

Bean Validation 框架主要解決以下問題:

  1. 驗證業務邏輯和限制(例如:是否為空、是否為郵件信箱、是否為數字等)。
  2. 驗證格式和文法(例如:日期、電話號碼、郵遞區號等)。
  3. 驗證兩個或多個欄位的互相依賴性(例如:開始日期必須早於結束日期)。

二、Bean Validation 如何運作?

Bean Validation 框架使用註解來標註需要校驗的參數,這些註解包括 @NotNull、@Min、@Max、@Size、@Pattern 等。當參數被傳遞到​​方法中時,Bean Validation 框架會自動執行對應的校驗規則,當校驗失敗時,Bean Validation 框架會傳送錯誤訊息。開發人員可以編寫自訂的校驗規則,以滿足業務需求。

Bean Validation 框架提供了一組預先定義的校驗規則,這些規則可以應用於 Java Bean 中的屬性和方法參數。預先定義的規則包括:

@NotNull:檢查是否為空值

@Size:檢查String、Collection、Map和陣列的長度

##@Min、@Max :檢查數值的大小

@Email:檢查是否為電子郵件地址

@Pattern:根據正規表示式檢查字串

使用Bean Validation 框架時,需要在類別路徑下包含javax.validation-api 和對應的Bean Validation 實現,例如Hibernate Validator,透過Maven,可以加入以下依賴:

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.1.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.10.Final</version>
</dependency>

三、Bean Validation 範例

假設我們有一個User 類,其中包含了使用者的基本訊息,現在需要對User 類別中的屬性進行校驗:

public class User {
    private String name;
    private Integer age;
    private String email;
    private String address;
  
    // getters and setters
}

專案所需的校驗規則如下:

    name 不為空且長度大於5 且小於10;
  1. age 不為空且大於0 且小於200;
  2. email 不為空且為有效的郵箱位址;
  3. # address 可以為空。
我們可以使用Bean Validation 來定義這些校驗規則,具體實作如下:

public class UserValidator {

    private Validator validator;

    public UserValidator() {
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        validator = factory.getValidator();
    }

    /**
     * 对 User 对象进行校验
     * 
     * @param user
     * @return
     */
    public String validate(User user) {

        Set<ConstraintViolation<User>> violations = validator.validate(user);

        StringBuilder result = new StringBuilder();
        if (!violations.isEmpty()) {
            for (ConstraintViolation<User> violation : violations) {
                result.append(violation.getMessage()).append(";");
            }
        }

        return result.toString();
    }
}

在UserValidator 類別中,我們使用了Validator 工具類,透過buildDefaultValidatorFactory() 方法建立一個ValidatorFactory 對象,從而建立一個實例化的Validator 物件。透過呼叫 validator.validate(user) 方法,可以對 User 物件進行校驗。對於校驗結果,我們將所有錯誤訊息記錄在 StringBuilder 物件中,並傳回給呼叫端。

最後,我們可以在測試類別中使用UserValidator 物件並進行測試:

public class UserValidatorTest {
  
    @Test
    void testValidateUser() {
        User user = new User();
        user.setName("abcd");
        user.setAge(300);
        user.setEmail("abc");
        user.setAddress(null);

        UserValidator validator = new UserValidator();
        String result = validator.validate(user);

        assertThat(result, containsString("Name length must be between 5 and 10."));
        assertThat(result, containsString("Size must be between 1 and 200."));
        assertThat(result, containsString("must be a well-formed email address"));
    }
}

在上面的測試方法中,我們建立了一個User 對象,其中的屬性不符合校驗規則,因此呼叫UserValidator 的validate() 方法會傳回對應的錯誤訊息。

四、總結

本文介紹了 Bean Validation 框架的概念和使用方法。此框架透過註解對參數進行校驗,可以幫助開發人員在編寫程式碼時預防輸入錯誤,在執行時偵測並提示使用者輸入錯誤。同時,開發人員可以根據業務需求編寫自訂的校驗規則,滿足更複雜的校驗場景。

以上是Java API 開發中使用 Bean Validation 進行參數校驗的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何將Apache的.htaccess配置轉換為Nginx的配置?如何將Apache的.htaccess配置轉換為Nginx的配置?Apr 19, 2025 pm 05:09 PM

將Apache的.htaccess配置轉換為Nginx的配置方法在項目開發中,經常會遇到需要將服務器從Apache遷移到Nginx的情況。 Ap...

在小規模JavaWeb應用中,Dao層對所有人員實體類進行緩存是否可行?在小規模JavaWeb應用中,Dao層對所有人員實體類進行緩存是否可行?Apr 19, 2025 pm 05:06 PM

JavaWeb應用性能優化:Dao層實體類緩存的可行性探討在JavaWeb應用開發中,性能優化一直是開發者關注的重點。尤�...

極坐標下二重積分∫∫ydσ=0的原因是什麼?極坐標下二重積分∫∫ydσ=0的原因是什麼?Apr 19, 2025 pm 05:03 PM

在極坐標系下求解二重積分本文將詳細解答一道關於極坐標下二重積分的題目。題目給出了一個積分區域和被積...

高並發下如何保證出庫腳本任務的唯一性並實時監控其運行狀態?高並發下如何保證出庫腳本任務的唯一性並實時監控其運行狀態?Apr 19, 2025 pm 05:00 PM

在高並發環境下如何保證腳本任務的唯一性和監控其運行狀態?本文將探討如何在集群環境中,確保一個出庫腳...

子類如何通過繼承父類的setName方法設置私有屬性?子類如何通過繼承父類的setName方法設置私有屬性?Apr 19, 2025 pm 04:57 PM

關於子類如何通過繼承父類的setName方法設置私有屬性在編程中,特別是在面向對象編程的語言如Java中,子類與�...

如何解決使用Eclipse Paho的MqttAsyncClient連接本地EMQX時用戶名密碼認證失敗的問題?如何解決使用Eclipse Paho的MqttAsyncClient連接本地EMQX時用戶名密碼認證失敗的問題?Apr 19, 2025 pm 04:54 PM

如何解決使用EclipsePaho的MqttAsyncClient連接本地EMQX時用戶名密碼認證失敗的問題?在使用Java和Eclipse...

公司安全軟件導致應用無法運行?如何排查和解決?公司安全軟件導致應用無法運行?如何排查和解決?Apr 19, 2025 pm 04:51 PM

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

Java如何正確生成並顯示微信小程序帶參數二維碼?Java如何正確生成並顯示微信小程序帶參數二維碼?Apr 19, 2025 pm 04:48 PM

在Java中生成帶參數的微信小程序二維碼並將其顯示在HTML頁面上,是一個常見的需求。本文將詳細探討如何使用J...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具