欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring?Boot?使用斷言讓你的代碼在上線前就通過“體檢”(最新整理)

 更新時間:2025年03月26日 14:30:20   作者:碼熔burning  
斷言是一種編程技巧,用于在代碼中插入檢查點,驗證程序的狀態(tài)是否符合預期,如果斷言失敗,程序會拋出一個錯誤,幫助你快速發(fā)現(xiàn)和修復bug,本文給大家介紹Spring?Boot?斷言:讓你的代碼在上線前就通過“體檢”,感興趣的朋友一起看看吧

一、什么是斷言?

想象一下,你在做菜。你心里想的是:“我加鹽的時候,鹽的量一定要是 5 克,不能多也不能少!??” 如果鹽的量不是 5 克,那這道菜可能就毀了。 

斷言,就像你做菜時的這個“心里想的”。 它是一種檢查機制,用來確保你的代碼在運行過程中,某些條件必須為真。 ? 如果條件不為真,就說明代碼出了問題,應該立即停止運行,并告訴你哪里出錯了。 

更正式的說法:

斷言是一種編程技巧,用于在代碼中插入一些檢查點,驗證程序的狀態(tài)是否符合預期。 如果斷言失敗(即條件為假),程序會拋出一個錯誤(通常是 AssertionError),幫助你快速發(fā)現(xiàn)和修復 bug。 

斷言的優(yōu)點:

  • 盡早發(fā)現(xiàn)錯誤: 在問題發(fā)生的地方立即報錯,而不是等到問題蔓延到其他地方才發(fā)現(xiàn)。 
  • 提高代碼可靠性: 通過斷言,你可以確保代碼在各種情況下都能正常工作。 
  • 簡化調(diào)試: 斷言失敗時,會提供詳細的錯誤信息,幫助你快速定位問題。 
  • 文檔作用: 斷言可以看作是一種代碼級別的文檔,說明了代碼的預期行為。 

二、Java 中的斷言

Java 提供了 assert 關(guān)鍵字來實現(xiàn)斷言。 它的基本語法是:

assert condition;  // 簡單斷言:如果 condition 為 false,則拋出 AssertionError
assert condition : message; // 帶消息的斷言:如果 condition 為 false,則拋出 AssertionError,并顯示 message
  • condition:一個布爾表達式,表示你期望為真的條件。
  • message:一個可選的字符串,用于提供更詳細的錯誤信息。

重要提示:

  • 默認情況下,Java 中的斷言是禁用的。 你需要在運行程序時顯式地啟用它們。
  • ??斷言不應該用于處理程序正常運行所必需的錯誤。 例如,不應該用斷言來檢查用戶輸入是否有效。 應該使用異常處理機制來處理這些錯誤。
  • 斷言主要用于開發(fā)和測試階段。 在生產(chǎn)環(huán)境中,通常會禁用斷言,因為它們可能會影響性能。 

如何啟用斷言:

在運行 Java 程序時,使用 -ea-enableassertions 選項來啟用斷言。

例如:

java -ea MyClass  // 啟用所有斷言
java -ea:com.example... MyClass // 啟用 com.example 包及其子包中的斷言
java -da MyClass // 禁用所有斷言

三、在 Spring Boot 中使用斷言

雖然 Java 提供了 assert 關(guān)鍵字,但在 Spring Boot 項目中,更常見的做法是使用 org.springframework.util.Assert 類。 這個類提供了一組靜態(tài)方法,用于執(zhí)行各種斷言。

org.springframework.util.Assert 類的常用方法:

  • Assert.isTrue(boolean expression, String message):斷言表達式為真。
  • Assert.isNull(Object object, String message):斷言對象為 null。
  • Assert.notNull(Object object, String message):斷言對象不為 null。
  • Assert.hasLength(String text, String message):斷言字符串不為 null 且長度大于 0。
  • Assert.hasText(String text, String message):斷言字符串不為 null 且包含非空白字符。
  • Assert.doesNotContain(String textToSearch, String substring, String message):斷言字符串不包含指定的子字符串。
  • Assert.notEmpty(Collection<?> collection, String message):斷言集合不為 null 且不為空。
  • Assert.noNullElements(Object[] array, String message):斷言數(shù)組不為 null 且不包含 null 元素。
  • Assert.isInstanceOf(Class<?> type, Object obj, String message):斷言對象是指定類型的實例。
  • Assert.state(boolean expression, String message):斷言對象的狀態(tài)是有效的。

四、Spring Boot 代碼示例

下面是一個完整的 Spring Boot 代碼示例,演示了如何使用 org.springframework.util.Assert 類進行斷言。

// 引入必要的依賴
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.util.Assert;
@SpringBootApplication
public class AssertionExampleApplication {
    public static void main(String[] args) {
        SpringApplication.run(AssertionExampleApplication.class, args);
    }
}
@RestController
class MyController {
    @GetMapping("/greet")
    public String greet(@RequestParam String name) {
        // 使用斷言來確保 name 不為 null 或空字符串
        Assert.hasText(name, "姓名不能為空或空字符串");
        // 如果斷言通過,則執(zhí)行正常的業(yè)務邏輯
        return "你好, " + name + "!";
    }
    @GetMapping("/calculate")
    public int calculate(@RequestParam int num1, @RequestParam int num2) {
        // 使用斷言來確保 num2 不為 0,防止除以 0 錯誤
        Assert.isTrue(num2 != 0, "除數(shù)不能為零");
        return num1 / num2;
    }
    @GetMapping("/processList")
    public String processList(@RequestParam(required = false) String listString) {
        // 使用斷言確保傳入的字符串不為空
        Assert.hasText(listString, "列表字符串不能為空或空字符串");
        String[] items = listString.split(",");
        Assert.noNullElements(items, "列表不能包含空元素");
        return "處理后的列表: " + String.join(" - ", items);
    }
}

代碼解釋:

  • AssertionExampleApplication 類: 標準的 Spring Boot 啟動類。 
  • MyController 類: 一個簡單的 REST 控制器,包含三個接口:
    • /greet 接口: 接收一個 name 參數(shù),使用 Assert.hasText() 斷言 name 不為 null 或空字符串。 如果 name 為 null 或空字符串,則會拋出一個 IllegalArgumentException 異常,并顯示錯誤消息 “姓名不能為空或空字符串”。
    • /calculate 接口: 接收兩個整數(shù) num1num2,使用 Assert.isTrue() 斷言 num2 不為 0。 如果 num2 為 0,則會拋出一個 IllegalArgumentException 異常,并顯示錯誤消息 “除數(shù)不能為零”。
    • /processList 接口: 接收一個逗號分隔的字符串列表,使用 Assert.hasText() 確保字符串不為空,然后使用 Assert.noNullElements() 確保分割后的數(shù)組不包含 null 元素。

如何運行示例:

  • 將代碼保存為 AssertionExampleApplication.java。
  • 使用 Maven 或 Gradle 構(gòu)建項目。
  • 運行 Spring Boot 應用程序。
  • 在瀏覽器或使用 curl 命令訪問以下 URL:
    • http://localhost:8080/greet?name=John (正常情況)
    • http://localhost:8080/greet?name= (斷言失敗,拋出異常) 

http://localhost:8080/calculate?num1=10&num2=2 (正常情況)

http://localhost:8080/calculate?num1=10&num2=0 (斷言失敗,拋出異常) 

http://localhost:8080/processList?listString=apple,banana,cherry (正常情況)

http://localhost:8080/processList?listString= (斷言失敗,拋出異常) 

http://localhost:8080/processList?listString=apple,banana, (正常情況)

你會在控制臺或瀏覽器中看到以下結(jié)果:

  • 正常情況: 返回 “你好, John!” 或計算結(jié)果。
  • 斷言失敗: 會看到一個 IllegalArgumentException 異常,其中包含斷言失敗的消息。 Spring Boot 默認會將異常轉(zhuǎn)換為 HTTP 500 錯誤。

異常信息將會是中文的,例如:“java.lang.IllegalArgumentException: 姓名不能為空或空字符串”

五、斷言的注意事項

  • 不要用斷言來驗證用戶輸入: 用戶輸入是不可信的,應該使用專門的驗證機制(例如,JSR-303 Bean Validation)。 
  • 不要在斷言中執(zhí)行有副作用的操作: 斷言應該只用于檢查狀態(tài),而不應該修改狀態(tài)。 ?? 否則,在禁用斷言時,程序的行為可能會發(fā)生改變。
  • 保持斷言簡潔明了: 斷言應該易于理解,能夠清晰地表達代碼的預期行為。 
  • 考慮使用單元測試代替復雜的斷言: 對于復雜的邏輯,使用單元測試通常比使用斷言更有效。 

六、總結(jié)

斷言是一種強大的工具,可以幫助你提高代碼的可靠性和可維護性。 在 Spring Boot 項目中,可以使用 org.springframework.util.Assert 類來方便地進行斷言。 記住,斷言主要用于開發(fā)和測試階段,不應該用于處理程序正常運行所必需的錯誤。 

希望篇文章能夠幫助你理解斷言的概念和用法! 

到此這篇關(guān)于Spring Boot 斷言:讓你的代碼在上線前就通過“體檢”!的文章就介紹到這了,更多相關(guān)Spring Boot 使用斷言內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring @Transactional工作原理詳解

    Spring @Transactional工作原理詳解

    這篇文章主要介紹了Spring @Transactional工作原理詳解,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • java從文件中讀取數(shù)據(jù)的六種方法

    java從文件中讀取數(shù)據(jù)的六種方法

    本文主要介紹了java從文件中讀取數(shù)據(jù)的方法,詳細的介紹了六種方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • JAVA 中解密RSA算法JS加密實例詳解

    JAVA 中解密RSA算法JS加密實例詳解

    這篇文章主要介紹了JAVA 中解密RSA算法JS加密 的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • listview點擊無效的處理方法(推薦)

    listview點擊無效的處理方法(推薦)

    下面小編就為大家?guī)硪黄猯istview點擊無效的處理方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Spring Cloud Gateway全局通用異常處理的實現(xiàn)

    Spring Cloud Gateway全局通用異常處理的實現(xiàn)

    這篇文章主要介紹了Spring Cloud Gateway全局通用異常處理的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • 完美解決java double數(shù)相加和相減的方案

    完美解決java double數(shù)相加和相減的方案

    這篇文章主要介紹了完美解決java double數(shù)相加和相減的方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 使用IDEA創(chuàng)建java項目的步驟詳解(hello word)

    使用IDEA創(chuàng)建java項目的步驟詳解(hello word)

    這篇文章主要介紹了使用IDEA創(chuàng)建java項目的步驟詳解(hello word),本文分步驟通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 在java上使用亞馬遜云儲存方法

    在java上使用亞馬遜云儲存方法

    這篇文章主要介紹了在java上使用亞馬遜云儲存方法,首先寫一個配置類,寫一個controller接口調(diào)用方法存儲文件,本文結(jié)合示例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2024-01-01
  • java獲取nvidia顯卡信息的實現(xiàn)示例

    java獲取nvidia顯卡信息的實現(xiàn)示例

    現(xiàn)在的需求是要獲取nvidia顯卡的使用情況,本文主要介紹了java獲取nvidia顯卡信息的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • 關(guān)于Spring?Cloud實現(xiàn)日志管理模塊

    關(guān)于Spring?Cloud實現(xiàn)日志管理模塊

    這篇文章主要介紹了關(guān)于Spring?Cloud實現(xiàn)日志管理模塊問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論