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

SpringBoot中如何使用Assert進行斷言校驗

 更新時間:2025年07月09日 15:41:13   作者:超級小忍  
Java?提供了內(nèi)置的?assert?機制,而?Spring?框架也提供了更強大的?Assert?工具類來幫助開發(fā)者進行參數(shù)校驗和狀態(tài)檢查,下面我們就來看看SpringBoot中如何使用Assert進行斷言校驗吧

前言

在開發(fā) Spring Boot 應(yīng)用時,確保程序邏輯的正確性和數(shù)據(jù)的有效性是非常重要的。Java 提供了內(nèi)置的 assert 機制,而 Spring 框架也提供了更強大的 Assert 工具類來幫助開發(fā)者進行參數(shù)校驗和狀態(tài)檢查。

本文將詳細介紹:

  • Java 原生 assert 的使用;
  • Spring 提供的 Assert 類;
  • 如何在 Spring Boot 中合理使用斷言;
  • 實際應(yīng)用場景與示例;
  • 最佳實踐建議。

一、Java 原生assert簡介

Java 自 J2SE 1.4 開始引入了 assert 關(guān)鍵字,用于在運行時對某些條件進行驗證。如果斷言失?。礂l件為 false),則會拋出 AssertionError。

1.1 使用方式

assert condition;
assert condition : errorMessage;

1.2 示例代碼

public class AssertExample {
    public static void main(String[] args) {
        int age = -5;
        assert age >= 0 : "年齡不能為負數(shù): " + age;
        System.out.println("年齡是:" + age);
    }
}

注意:默認情況下 JVM 是禁用斷言的,需要加上 -ea(enable assertions)參數(shù)啟動:

java -ea AssertExample

1.3 優(yōu)缺點分析

優(yōu)點缺點
簡單易用默認不啟用
可快速發(fā)現(xiàn)邏輯錯誤不適合用于生產(chǎn)環(huán)境
適合調(diào)試階段使用拋出的是 Error,不是 Exception

二、Spring Framework 中的Assert工具類

Spring 提供了 org.springframework.util.Assert 工具類,封裝了一系列靜態(tài)方法,專門用于參數(shù)校驗和狀態(tài)斷言。

2.1 引入依賴

如果你使用的是 Spring Boot,默認已經(jīng)包含了 Spring Core 模塊,因此可以直接使用 Assert 類。

Maven 項目中可以確認是否包含以下依賴(通常不需要手動添加):

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
</dependency>

2.2 常用方法介紹

方法名描述
Assert.notNull(Object object, String message)判斷對象是否為 null,否則拋出 IllegalArgumentException
Assert.hasText(String text, String message)判斷字符串是否非空且非空白
Assert.isTrue(boolean expression, String message)判斷布爾表達式是否為 true
Assert.noNullElements(Collection<?> collection, String message)集合中不能有 null 元素
Assert.state(boolean expression, String message)用于檢查對象狀態(tài),拋出 IllegalStateException

2.3 示例代碼

示例 1:檢查參數(shù)非空

import org.springframework.util.Assert;

public class UserService {
    public void createUser(String username) {
        Assert.notNull(username, "用戶名不能為空");
        // 創(chuàng)建用戶邏輯
    }
}

示例 2:檢查集合元素非空

import java.util.List;
import org.springframework.util.Assert;

public class OrderService {
    public void processOrders(List<String> orderIds) {
        Assert.notEmpty(orderIds, "訂單ID列表不能為空");
        Assert.noNullElements(orderIds, "訂單ID中不能包含null值");
        // 處理訂單邏輯
    }
}

示例 3:檢查狀態(tài)

public class PaymentService {
    private boolean initialized = false;

    public void init() {
        // 初始化邏輯
        initialized = true;
    }

    public void pay() {
        Assert.state(initialized, "支付服務(wù)未初始化");
        // 支付邏輯
    }
}

三、在 Spring Boot 中的最佳使用場景

3.1 Controller 層參數(shù)校驗

雖然 @Valid@RequestBody 注解更適合做請求參數(shù)校驗,但在業(yè)務(wù)邏輯處理前也可以使用 Assert 來進一步確保參數(shù)有效。

@RestController
@RequestMapping("/users")
public class UserController {

    @PostMapping
    public ResponseEntity<Void> createUser(@RequestBody UserDto userDto) {
        Assert.notNull(userDto, "用戶信息不能為空");
        Assert.hasText(userDto.getUsername(), "用戶名不能為空");

        // 調(diào)用 service 保存用戶
        return ResponseEntity.ok().build();
    }
}

3.2 Service 層參數(shù)或狀態(tài)校驗

這是最推薦使用 Assert 的地方,可以避免非法參數(shù)傳遞到核心業(yè)務(wù)邏輯中。

@Service
public class OrderService {

    public void placeOrder(Order order) {
        Assert.notNull(order, "訂單不能為空");
        Assert.notNull(order.getItems(), "訂單商品列表不能為空");

        if (order.getItems().isEmpty()) {
            throw new IllegalArgumentException("訂單必須包含至少一個商品");
        }

        // 下單邏輯
    }
}

3.3 Repository 層數(shù)據(jù)一致性校驗(可選)

對于數(shù)據(jù)庫操作之前的數(shù)據(jù)一致性檢查,也可以加入斷言輔助判斷。

@Repository
public class UserRepository {

    public void save(User user) {
        Assert.notNull(user, "用戶實體不能為空");
        Assert.hasText(user.getEmail(), "郵箱不能為空");

        // 執(zhí)行保存操作
    }
}

四、與 Bean Validation 的對比

特性Assert@Valid / JSR 380
校驗時機方法調(diào)用前接收到請求后自動校驗
拋出異常類型IllegalArgumentException, IllegalStateExceptionMethodArgumentNotValidException
是否支持嵌套對象校驗否,需手動編寫邏輯
是否適用于所有層主要用于 Controller 層
是否支持國際化
是否可組合多個規(guī)則是(通過注解組合)

結(jié)論

  • @Valid 更適合前端傳參的統(tǒng)一校驗;
  • Assert 更適合在 Service、Repository 或內(nèi)部邏輯中進行細粒度的參數(shù)或狀態(tài)檢查。

五、最佳實踐建議

  • 不要替代正式異常處理:斷言用于“不應(yīng)該發(fā)生”的情況,而不是預(yù)期中的錯誤。
  • 避免在公有 API 中使用 assert:因為原生 assert 可能被關(guān)閉,行為不可控。
  • 優(yōu)先使用 Spring 的 Assert 類:它拋出的是 IllegalArgumentExceptionIllegalStateException,易于捕獲和處理。
  • 結(jié)合日志記錄:在斷言失敗時記錄詳細信息,有助于排查問題。
  • 斷言信息要清晰明確:便于定位問題,如 "用戶名不能為空""invalid input" 更好。

六、總結(jié)

在 Spring Boot 項目中,assertAssert 類是兩個非常實用的工具,可以幫助我們在開發(fā)過程中盡早發(fā)現(xiàn)問題,提升代碼健壯性。盡管它們不具備完整的校驗?zāi)芰Γ鳛檩p量級的防御性編程手段,非常適合用于中間層的參數(shù)和狀態(tài)檢查。

使用位置推薦方式
Controller@Valid + @RequestBody + Assert 輔助
ServiceAssert 校驗參數(shù)/狀態(tài)
RepositoryAssert 校驗輸入數(shù)據(jù)合法性

掌握并合理使用這些斷言機制,不僅能提高代碼質(zhì)量,也能減少運行時錯誤的發(fā)生。

到此這篇關(guān)于SpringBoot中如何使用Assert進行斷言校驗的文章就介紹到這了,更多相關(guān)SpringBoot斷言校驗內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入分析JAVA Synchronized關(guān)鍵字

    深入分析JAVA Synchronized關(guān)鍵字

    這篇文章主要介紹了析JAVA Synchronized關(guān)鍵字的相關(guān)知識,文中代碼非常詳細,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • java中isEmpty和isBlank的區(qū)別小結(jié)

    java中isEmpty和isBlank的區(qū)別小結(jié)

    Java中的isEmpty和isBlank都是用來判斷字符串是否為空的方法,但在不同的情況下有所區(qū)別,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • JVM的垃圾回收機制真是通俗易懂

    JVM的垃圾回收機制真是通俗易懂

    這篇文章主要為大家詳細介紹了JVM的垃圾回收機制,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • JAVA調(diào)用JavaScript方法代碼示例

    JAVA調(diào)用JavaScript方法代碼示例

    之前在一次機緣巧合的情況下,需要時用JAVA執(zhí)行js方法,查閱了一些文檔,找到了相關(guān)解決方法,這里和大家分享一下,這篇文章主要給大家介紹了關(guān)于JAVA調(diào)用JavaScript方法的相關(guān)資料,需要的朋友可以參考下
    2023-09-09
  • Mybatis中#{}與${}的區(qū)別詳解

    Mybatis中#{}與${}的區(qū)別詳解

    這篇文章主要介紹了Mybatis中#{}與${}的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Java靜態(tài)和非靜態(tài)成員變量初始化過程解析

    Java靜態(tài)和非靜態(tài)成員變量初始化過程解析

    這篇文章主要介紹了Java靜態(tài)和非靜態(tài)成員變量初始化過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • 關(guān)于@Autowired注解和靜態(tài)方法及new的關(guān)系

    關(guān)于@Autowired注解和靜態(tài)方法及new的關(guān)系

    這篇文章主要介紹了關(guān)于@Autowired注解和靜態(tài)方法及new的關(guān)系,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 關(guān)于Maven的使用,這些你都真的了解么

    關(guān)于Maven的使用,這些你都真的了解么

    這篇文章主要介紹了關(guān)于Maven的使用,這些你都真的了解么?具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot的API文檔生成工具SpringDoc使用詳解

    SpringBoot的API文檔生成工具SpringDoc使用詳解

    這篇文章主要為大家介紹了SpringBoot的API文檔生成工具SpringDoc使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 教你在SpringBoot中管理多環(huán)境配置文件

    教你在SpringBoot中管理多環(huán)境配置文件

    在項目開發(fā)中,一般會分為開發(fā)環(huán)境,測試環(huán)境和生產(chǎn)環(huán)境.如果總是在一個文件中修修改改,難免會出現(xiàn)錯誤,尤其是在交接的過程中,一旦出現(xiàn)問題,輕則丟失績效,重則需要刪庫跑路.本文則帶大家詳細了解怎么管理多環(huán)境配置文件,需要的朋友可以參考下
    2021-05-05

最新評論