最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、什么是斷言?

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

斷言,就像你做菜時(shí)的這個(gè)“心里想的”。 它是一種檢查機(jī)制,用來(lái)確保你的代碼在運(yùn)行過(guò)程中,某些條件必須為真。 ? 如果條件不為真,就說(shuō)明代碼出了問(wèn)題,應(yīng)該立即停止運(yùn)行,并告訴你哪里出錯(cuò)了。 

更正式的說(shuō)法:

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

斷言的優(yōu)點(diǎn):

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

二、Java 中的斷言

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

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

重要提示:

  • 默認(rèn)情況下,Java 中的斷言是禁用的。 你需要在運(yùn)行程序時(shí)顯式地啟用它們。
  • ??斷言不應(yīng)該用于處理程序正常運(yùn)行所必需的錯(cuò)誤。 例如,不應(yīng)該用斷言來(lái)檢查用戶輸入是否有效。 應(yīng)該使用異常處理機(jī)制來(lái)處理這些錯(cuò)誤。
  • 斷言主要用于開(kāi)發(fā)和測(cè)試階段。 在生產(chǎn)環(huán)境中,通常會(huì)禁用斷言,因?yàn)樗鼈兛赡軙?huì)影響性能。 

如何啟用斷言:

在運(yùn)行 Java 程序時(shí),使用 -ea-enableassertions 選項(xiàng)來(lái)啟用斷言。

例如:

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

三、在 Spring Boot 中使用斷言

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

org.springframework.util.Assert 類(lèi)的常用方法:

  • Assert.isTrue(boolean expression, String message):斷言表達(dá)式為真。
  • Assert.isNull(Object object, String message):斷言對(duì)象為 null。
  • Assert.notNull(Object object, String message):斷言對(duì)象不為 null。
  • Assert.hasLength(String text, String message):斷言字符串不為 null 且長(zhǎng)度大于 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):斷言對(duì)象是指定類(lèi)型的實(shí)例。
  • Assert.state(boolean expression, String message):斷言對(duì)象的狀態(tài)是有效的。

四、Spring Boot 代碼示例

下面是一個(gè)完整的 Spring Boot 代碼示例,演示了如何使用 org.springframework.util.Assert 類(lèi)進(jìn)行斷言。

// 引入必要的依賴
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) {
        // 使用斷言來(lái)確保 name 不為 null 或空字符串
        Assert.hasText(name, "姓名不能為空或空字符串");
        // 如果斷言通過(guò),則執(zhí)行正常的業(yè)務(wù)邏輯
        return "你好, " + name + "!";
    }
    @GetMapping("/calculate")
    public int calculate(@RequestParam int num1, @RequestParam int num2) {
        // 使用斷言來(lái)確保 num2 不為 0,防止除以 0 錯(cuò)誤
        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);
    }
}

代碼解釋?zhuān)?/strong>

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

如何運(yùn)行示例:

  • 將代碼保存為 AssertionExampleApplication.java
  • 使用 Maven 或 Gradle 構(gòu)建項(xiàng)目。
  • 運(yùn)行 Spring Boot 應(yīng)用程序。
  • 在瀏覽器或使用 curl 命令訪問(wèn)以下 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, (正常情況)

你會(huì)在控制臺(tái)或?yàn)g覽器中看到以下結(jié)果:

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

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

五、斷言的注意事項(xiàng)

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

六、總結(jié)

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

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

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

相關(guān)文章

  • Java????????HashMap遍歷方法匯總

    Java????????HashMap遍歷方法匯總

    這篇文章主要介紹了Java????????HashMap遍歷方法匯總,HashMap?的遍歷方法有很多種,不同的?JDK?版本有不同的寫(xiě)法,下文關(guān)于其遍歷方法總結(jié)需要的小伙伴可以參考一下
    2022-05-05
  • Spring注解開(kāi)發(fā)生命周期原理解析

    Spring注解開(kāi)發(fā)生命周期原理解析

    這篇文章主要介紹了Spring注解開(kāi)發(fā)生命周期原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 分布式Netty源碼分析EventLoopGroup及介紹

    分布式Netty源碼分析EventLoopGroup及介紹

    這篇文章主要介紹了分布式Netty源碼分析EventLoopGroup及介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • JAVA偏向鎖的原理與實(shí)戰(zhàn)

    JAVA偏向鎖的原理與實(shí)戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了JAVA偏向鎖的原理與實(shí)戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • SpringMVC全局異常處理的三種方式

    SpringMVC全局異常處理的三種方式

    這篇文章主要介紹了SpringMVC全局異常處理的三種方式,幫助大家更好的理解和使用springmvc,感興趣的朋友可以了解下
    2021-01-01
  • Java面試題沖刺第二十三天--算法(2)

    Java面試題沖刺第二十三天--算法(2)

    這篇文章主要為大家分享了最有價(jià)值的三道關(guān)于算法的面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java自動(dòng)生成編號(hào)的方法步驟

    Java自動(dòng)生成編號(hào)的方法步驟

    在新增數(shù)據(jù)時(shí),往往需要自動(dòng)生成編號(hào),本文主要介紹了Java自動(dòng)生成編號(hào)的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java之多個(gè)線程順序循環(huán)執(zhí)行的幾種實(shí)現(xiàn)

    Java之多個(gè)線程順序循環(huán)執(zhí)行的幾種實(shí)現(xiàn)

    這篇文章主要介紹了Java之多個(gè)線程順序循環(huán)執(zhí)行的幾種實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • java 中模式匹配算法-KMP算法實(shí)例詳解

    java 中模式匹配算法-KMP算法實(shí)例詳解

    這篇文章主要介紹了java 中模式匹配算法-KMP算法實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • EasyUi+Spring Data 實(shí)現(xiàn)按條件分頁(yè)查詢的實(shí)例代碼

    EasyUi+Spring Data 實(shí)現(xiàn)按條件分頁(yè)查詢的實(shí)例代碼

    這篇文章主要介紹了EasyUi+Spring Data 實(shí)現(xiàn)按條件分頁(yè)查詢的實(shí)例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-07-07

最新評(píng)論

宿州市| 南安市| 登封市| 福建省| 延吉市| 麻江县| 嵊泗县| 丰宁| 渝中区| 汽车| 庆阳市| 镇平县| 玛多县| 遂川县| 榆林市| 自治县| 泰兴市| 老河口市| 平武县| 麟游县| 英超| 乐清市| 新昌县| 聊城市| 凤庆县| 定兴县| 大庆市| 桐庐县| 柳江县| 文昌市| 钟山县| 镇康县| 论坛| 高雄县| 焦作市| 和林格尔县| 申扎县| 江津市| 湖北省| 东阳市| 益阳市|