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

SpringBoot結(jié)果封裝和異常攔截的實現(xiàn)示例

 更新時間:2023年08月17日 08:57:37   作者:小虎哥的技術(shù)博客  
SpringBoot 項目中,我們通常需要將結(jié)果數(shù)據(jù)封裝成特定的格式,以方便客戶端進行處理,本文主要介紹了SpringBoot?優(yōu)雅的結(jié)果封裝和異常攔截,感興趣的可以了解一下

在 SpringBoot 項目中,我們通常需要將結(jié)果數(shù)據(jù)封裝成特定的格式,以方便客戶端進行處理。我們可以將封裝結(jié)果的代碼封裝成一個工具類或統(tǒng)一的響應類型,以簡化代碼的編寫工作,并且方便統(tǒng)一管理。下面介紹一個簡單的例子,說明如何對 SpringBoot 返回結(jié)果進行封裝。

1. 定義 CommonResult 類

我們可以定義一個名為 CommonResult<T> 的類,用于封裝接口的響應結(jié)果。它包含三個字段,分別對應了狀態(tài)碼 code、響應消息 msg 和響應數(shù)據(jù) data,其中數(shù)據(jù)類型為泛型 T。code 字段是 int 類型的。

public class CommonResult<T> {
? ? private int code; ?// 響應狀態(tài)碼
? ? private String msg; ?// 響應消息
? ? private T data; ?// 響應數(shù)據(jù)
? ? // 構(gòu)造器
? ? public CommonResult() {}
? ? public CommonResult(int code, String msg, T data) {
? ? ? ? this.code = code;
? ? ? ? this.msg = msg;
? ? ? ? this.data = data;
? ? }
? ? // 省略 Getter 和 Setter 方法
}

2. 定義響應碼 ResponseCode

為了方便管理和調(diào)用響應狀態(tài)碼,我們可以定義一個名為 ResponseCode 的類,用來統(tǒng)一管理響應狀態(tài)碼。

public enum ResponseCode {
? ? SUCCESS(200, "操作成功"),
? ? FAIL(500, "操作失敗");
? ? // 狀態(tài)碼和狀態(tài)信息
? ? private final int code;
? ? private final String message;
? ? // 構(gòu)造器
? ? private ResponseCode(int code, String message) {
? ? ? ? this.code = code;
? ? ? ? this.message = message;
? ? }
? ? // Getter 方法
? ? public int getCode() {
? ? ? ? return code;
? ? }
? ? public String getMessage() {
? ? ? ? return message;
? ? }
}

在這里我們只定義了兩種響應狀態(tài)碼,分別是成功和失敗,對應的狀態(tài)碼分別為 200 和 500。在實際項目中,我們可以根據(jù)實際業(yè)務場景定義更多的響應狀態(tài)碼。

3. 自定義異常 BizException

我們還可以定義一個自定義異常類 BizException,用于處理自定義異常場景,并在 GlobalExceptionHandler 中進行攔截與處理。

public class BizException extends RuntimeException {
? ? private int code;
? ? public BizException(ResponseCode responseCode) {
? ? ? ? super(responseCode.getMessage());
? ? ? ? this.code = responseCode.getCode();
? ? }
? ? // Getter 方法
? ? public int getCode() {
? ? ? ? return code;
? ? }
}

Biz是英文Business的縮寫,表示業(yè)務中發(fā)生的異常。

在該類中,我們定義了響應狀態(tài)碼對應的異常,并在構(gòu)造方法中傳入對應的 ResponseCode 來初始化異常的 code 字段。

4. 統(tǒng)一處理異常情況

在實際項目中,我們需要對異常情況進行處理,以保證系統(tǒng)的穩(wěn)定性和可控性。因此,我們可以在對外暴露的 API 接口中添加異常處理機制,以統(tǒng)一處理系統(tǒng)拋出的異常情況,并防止系統(tǒng)掛掉。
在 SpringBoot 中,我們可以通過使用 @RestControllerAdvice 和 @ExceptionHandler 注解來進行異常處理。具體實現(xiàn)方式如下:

@RestControllerAdvice
public class GlobalExceptionHandler {
? ? @ExceptionHandler(Exception.class)
? ? public CommonResult<String> handleException(Exception e) {
? ? ? ? log.error("系統(tǒng)異常:{}", e.getMessage());
? ? ? ? return new CommonResult<>(ResponseCode.FAIL.getCode(), "系統(tǒng)錯誤,請聯(lián)系管理員", null);
? ? }
? ? @ExceptionHandler(BizException.class)
? ? public CommonResult<String> handleBizException(BizException e) {
? ? ? ? log.error("業(yè)務異常:{}", e.getMessage());
? ? ? ? return new CommonResult<>(e.getCode(), e.getMessage(), null);
? ? }
}

在上面的例子中,我們使用了 @RestControllerAdvice 注解來定義一個全局的異常處理類,使用 @ExceptionHandler(Exception.class) 和 @ExceptionHandler(BizException.class) 注解來分別處理全局異常和自定義的業(yè)務異常。

當系統(tǒng)發(fā)生異常時,會被 handleException 方法所捕獲,輸出異常日志,并返回一個業(yè)務失敗的結(jié)果。而當業(yè)務異常發(fā)生時,會被 handleBizException 方法所捕獲,返回該業(yè)務異常對應的狀態(tài)碼、響應消息和響應數(shù)據(jù)。

5. 使用結(jié)果封裝類和模擬異常攔截

@RestController
@RequestMapping("/api")
public class UserController {
? ? // 省略注入代碼
? ? @GetMapping("/users/{id}")
? ? public CommonResult<User> getUserById(@PathVariable("id") Long id) {
? ? ? ? User user = userService.getUserById(id);
? ? ? ? if (null != user) {
? ? ? ? ? ? return new CommonResult<>(ResponseCode.SUCCESS.getCode(), ResponseCode.SUCCESS.getMessage(), user);
? ? ? ? } else {
? ? ? ? ? ? throw new BizException(ResponseCode.FAIL);
? ? ? ? }
? ? }
}

使用CommonResult<User>來返回數(shù)據(jù)給前端
throw new BizException(ResponseCode.FAIL);拋出異常后會在異常攔截器那里攔截統(tǒng)一進行處理

6. 總結(jié)

在本篇教程中,我們介紹了如何使用 SpringBoot 來封裝返回結(jié)果。我們定義了 CommonResult 類、ResponseCode 類和 BizException 自定義業(yè)務異常類,用于封裝響應結(jié)果、統(tǒng)一管理響應狀態(tài)碼和處理自定義業(yè)務異常。我們也介紹了如何使用 @RestControllerAdvice 和 @ExceptionHandler 注解來統(tǒng)一處理異常情況,避免因為異常情況導致系統(tǒng)不穩(wěn)定。在實際項目中,我們可以根據(jù)實際情況對以上代碼進行修改和調(diào)整,以適應不同的業(yè)務場景。

到此這篇關(guān)于SpringBoot結(jié)果封裝和異常攔截的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)SpringBoot 結(jié)果封裝和異常攔截內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring解決循環(huán)依賴問題及三級緩存的作用

    Spring解決循環(huán)依賴問題及三級緩存的作用

    這篇文章主要介紹了Spring解決循環(huán)依賴問題及三級緩存的作用,所謂的三級緩存只是三個可以當作是全局變量的Map,Spring的源碼中大量使用了這種先將數(shù)據(jù)放入容器中等使用結(jié)束再銷毀的代碼風格
    2022-07-07
  • Java數(shù)據(jù)結(jié)構(gòu)之有向圖的拓撲排序詳解

    Java數(shù)據(jù)結(jié)構(gòu)之有向圖的拓撲排序詳解

    這篇文章主要為大家詳細介紹了Java數(shù)據(jù)結(jié)構(gòu)中有向圖的拓撲排序,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解一下
    2022-11-11
  • Springboot Vue可配置調(diào)度任務實現(xiàn)示例詳解

    Springboot Vue可配置調(diào)度任務實現(xiàn)示例詳解

    這篇文章主要為大家介紹了Springboot Vue可配置調(diào)度任務實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • RocketMQ中消費者概念和消費流程詳解

    RocketMQ中消費者概念和消費流程詳解

    這篇文章主要介紹了RocketMQ中消費者概念和消費流程詳解,RocketMQ是一款高性能、高可靠性的分布式消息中間件,消費者是RocketMQ中的重要組成部分,消費者負責從消息隊列中獲取消息并進行處理,需要的朋友可以參考下
    2023-10-10
  • idea中l(wèi)ombok啟用的方法示例

    idea中l(wèi)ombok啟用的方法示例

    這篇文章主要介紹了idea中l(wèi)ombok啟用的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Spring Boot maven框架搭建教程圖解

    Spring Boot maven框架搭建教程圖解

    這篇文章主要介紹了Spring Boot maven框架搭建教程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • 簡易版SpringBoot自定義模擬實現(xiàn)

    簡易版SpringBoot自定義模擬實現(xiàn)

    SpringBoot作為目前最流行的框架之一,極大地提高了開發(fā)效率和降低了學習成本,使得開發(fā)人員能夠更專注于業(yè)務邏輯的實現(xiàn),而無需過多關(guān)注底層框架的配置和集成,本文模擬實現(xiàn)簡易版SpringBoot
    2024-01-01
  • MyBatis-Plus使用sl4j日志打印SQL的代碼詳解

    MyBatis-Plus使用sl4j日志打印SQL的代碼詳解

    以下是關(guān)于使用 Spring Boot 起始器替換 slf4j-api 和 logback 依賴的詳細步驟和注意事項,包括 MyBatis-Plus 的默認日志級別信息,需要的朋友可以參考下
    2024-10-10
  • Java多線程下載的實現(xiàn)方法

    Java多線程下載的實現(xiàn)方法

    復習多線程的時候,練習了下,順便記錄一下:
    2013-03-03
  • mybatis-plus內(nèi)置雪花算法主鍵重復問題解決

    mybatis-plus內(nèi)置雪花算法主鍵重復問題解決

    本文主要介紹了mybatis-plus內(nèi)置雪花算法主鍵重復問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-09-09

最新評論