Apache Commons 驗證器簡介
1. 概述
在本教程中,我們將學習Apache Commons Validator的基礎知識,這是一個來自 Apache Commons 的強大函式庫。它簡化了 Java 應用程式中的資料驗證。首先,我們將了解它的用例。接下來,我們將介紹如何設定它。隨後,我們將學習使用其內建驗證器並探索表單驗證和 API 輸入驗證等實際用例。
2.什麼是 Apache Commons 驗證器?
Apache Commons Validator 是一個 Java 函式庫,可根據常見約束驗證輸入資料。特別是,它為各種類型的驗證提供開箱即用的支持,包括電子郵件、URL 和日期驗證。我們使用它來避免重新發明驗證邏輯並確保整個應用程式的一致性。
2.1.為什麼使用驗證庫?
資料驗證容易出錯且繁瑣,而且在處理複雜約束時尤其如此。因此,像 Apache Commons Validator 這樣的專用驗證庫可以透過為常見用例提供預先建置的驗證器來節省時間。此外,它不僅可以促進更清晰的程式碼,而且還可以確保輸入得到一致的檢查。從長遠來看,這會提高應用程式的整體安全性和完整性。
2.2. Apache Commons Validator 的實際用例
API 需要強大的驗證以確保它們只接受格式正確的資料。考慮到這一點,Apache Commons Validator 允許我們快速驗證輸入有效負載。此外,我們不必從頭開始編寫自訂驗證邏輯。當客戶端透過 HTTP 請求發送資料時,這尤其有用。實際上,在這些場景中,URL、數值、信用卡號或郵遞區號等輸入需要在進一步處理之前進行驗證。
驗證在確保應用程式內資料的安全性和完整性方面也發揮關鍵作用。未經正確驗證的資料可能會導致 SQL 注入或跨站點腳本 (XSS) 等安全漏洞。我們使用它透過應用嚴格的輸入驗證規則來降低此類風險。重要的是要認識到,它確保只允許有效資料進入系統並防止惡意進入。
3.Maven依賴
我們需要將[commons-validator](https://mvnrepository.com/artifact/commons-validator/commons-validator)
相依性新增至 Maven pom.xml
:
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>1.9.0</version>
</dependency>
4. 內建驗證器
可重複使用的驗證器位於[org.apache.commons.validator.routines](https://commons.apache.org/proper/commons-validator/apidocs/org/apache/commons/validator/routines/package-summary.html)
套件中。 Commons Validator 有兩個目的:提供標準的、獨立的驗證例程/函數以及提供用於驗證的迷你框架。自從版本 1.3.0 以來,建立此套件是為了區分這兩個問題。它是 Commons Validator 中標準的、獨立的驗證例程/函數的位置。首先,該套件的內容不依賴 Commons Validator 的框架方面。其次,我們可以單獨使用它們。
讓我們熟悉一些驗證器例程。
5. 日期和時間驗證器
**日期和時間驗證器可以根據指定的格式進行驗證,或使用指定Locale.
**有以下三個選項可供選擇:
- 日期驗證器 – 驗證日期並將其轉換為
java.util.Date
類型。 - 日曆驗證器 – 驗證日期並將其轉換為
java.util.Calendar
類型。 - 時間驗證器 – 驗證時間並將其轉換為
java.util.Calendar
類型。
5.1.驗證日期值
讓我們學習使用日期驗證器。首先,讓我們看看如何使用validate()
方法。如果輸入有效,則傳回日期,否則傳回null.
@Test
void givenDate_whenValidationIsCalled_thenChecksDate() {
DateValidator validator = DateValidator.getInstance();
String validDate = "28/01/2024";
String invalidDate = "28/13/2024";
assertNotNull(validator.validate(validDate, "dd/MM/yyyy"));
assertTrue(validator.isValid(validDate, "dd/MM/yyyy"));
assertNull(validator.validate(invalidDate, "dd/MM/yyyy"));
assertFalse(validator.isValid(invalidDate, "dd/MM/yyyy"));
GregorianCalendar gregorianCalendar = new GregorianCalendar(2024, Calendar.JANUARY, 28, 10, 30);
gregorianCalendar.setTimeZone(TimeZone.getTimeZone("GMT"));
Date date = gregorianCalendar.getTime();
assertEquals("28-Jan-2024", validator.format(date, "dd-MMM-yyyy"));
TimeZone timeZone = TimeZone.getTimeZone("GMT+5");
assertEquals("28/01/2024 15:30", validator.format(date, "dd/MM/yyyy HH:mm", timeZone));
}
此測試透過檢查有效和無效日期格式來驗證DateValidator
。首先,它使用validate().
如果輸入是有效Date
則傳回日期,否則傳回null.
然後,它使用isValid().
如果輸入是有效Date
則傳回true
否則傳回false.
之後,它將GregorianCalendar
日期格式化為字串。最後,它確認正確的輸出,考慮到時區調整。
6. 數位驗證器
數位驗證器根據指定的格式進行驗證。它們使用指定Locale.
特別是,它們為不同的數位資料類型提供驗證器。他們提供以下驗證器:位元組驗證器、短驗證器、整數驗證器、長驗證器、浮點驗證器、雙精確度驗證器、BigInteger 驗證器和BigDecimal 驗證器。
6.1.驗證數值
通常,我們使用IntegerValidator
來驗證數值。
@Test
void givenNumericString_whenValidationIsCalled_thenReturnsNumber() {
IntegerValidator validator = IntegerValidator.getInstance();
String pattern = "00000";
int number = 1234;
String formattedNumber = validator.format(number, pattern, Locale.US);
assertEquals(number, validator.validate(formattedNumber, pattern));
assertNotNull(validator.validate("123.4", Locale.GERMAN));
}
此測試透過使用模式格式化數字然後驗證它來檢查IntegerValidator
功能。首先,它確認格式化的數字與原始數字相符。之後,它測試特定於區域設定的驗證,確保驗證器正確解釋不同區域設定中的數字字串。
7. 貨幣驗證器
預設實作將貨幣金額轉換為java.math.BigDecimal.
此外,它還提供寬鬆的貨幣符號驗證,這意味著貨幣金額無論有沒有符號都有效。
@Test
void givenCurrencyString_whenValidationIsCalled_thenReturnsCurrency() {
BigDecimalValidator validator = CurrencyValidator.getInstance();
assertEquals(new BigDecimal("1234.56"), validator.validate("$1,234.56", Locale.US));
assertEquals("$1,234.56", validator.format(1234.56, Locale.US));
}
此測試驗證CurrencyValidator
是否正確將美國貨幣字串解析為BigDecimal
值,並將數值格式化回美國貨幣格式。它確保正確處理特定於區域設定的貨幣字串。
8. 其他驗證器
Apache Commons 提供了許多這樣的驗證器例程:
- 正規驗證器允許我們使用 Java 1.4+ 正規表示式支援來驗證輸入,使我們能夠靈活地定義複雜的驗證模式。
- 校驗位例程幫助我們驗證和計算各種類型代碼的校驗位,例如 EAN/UPC、信用卡號和 ISBN。
- 程式碼驗證器提供全面的程式碼驗證,包括檢查格式、強制執行最小和最大長度要求以及驗證校驗位元。
- ISBN 驗證器可協助驗證 ISBN-10 和 ISBN-13 格式,確保提供的 ISBN 準確。
- IP 位址驗證器可以驗證 IPv4 位址,確保它們符合正確的格式和結構。
- 電子郵件地址驗證器為電子郵件地址提供強大的驗證,確保它們遵守正確格式和結構的行業標準。
- URL 驗證器可協助根據 URL 的方案、網域和權限來驗證 URL,確保它們的格式正確且有效。
- 網域驗證程式驗證網域名稱並根據 IANA TLD 官方清單進行檢查,確保它們格式正確且位於有效 TLD 之內。
9. 結論
在本教程中,我們首先探索了 Apache Commons Validator 庫,重點是驗證日期、數位和貨幣的實際範例。然後,我們透過程式碼片段示範如何使用特定的驗證器,例如DateValidator
、 IntegerValidator
和CurrencyValidator
。最後,我們簡要介紹了其他可用的驗證器,展示了該程式庫滿足常見資料驗證需求的多功能性。
像往常一樣,完整的源代碼可以在 GitHub 上找到。