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

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

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

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

1. 定義 CommonResult 類

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

public class CommonResult<T> {
? ? private int code; ?// 響應(yīng)狀態(tài)碼
? ? private String msg; ?// 響應(yīng)消息
? ? private T data; ?// 響應(yīng)數(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. 定義響應(yīng)碼 ResponseCode

為了方便管理和調(diào)用響應(yīng)狀態(tài)碼,我們可以定義一個(gè)名為 ResponseCode 的類,用來統(tǒng)一管理響應(yī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;
? ? }
}

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

3. 自定義異常 BizException

我們還可以定義一個(gè)自定義異常類 BizException,用于處理自定義異常場(chǎng)景,并在 GlobalExceptionHandler 中進(jìn)行攔截與處理。

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è)務(wù)中發(fā)生的異常。

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

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

在實(shí)際項(xiàng)目中,我們需要對(duì)異常情況進(jìn)行處理,以保證系統(tǒng)的穩(wěn)定性和可控性。因此,我們可以在對(duì)外暴露的 API 接口中添加異常處理機(jī)制,以統(tǒng)一處理系統(tǒng)拋出的異常情況,并防止系統(tǒng)掛掉。
在 SpringBoot 中,我們可以通過使用 @RestControllerAdvice 和 @ExceptionHandler 注解來進(jìn)行異常處理。具體實(shí)現(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)錯(cuò)誤,請(qǐng)聯(lián)系管理員", null);
? ? }
? ? @ExceptionHandler(BizException.class)
? ? public CommonResult<String> handleBizException(BizException e) {
? ? ? ? log.error("業(yè)務(wù)異常:{}", e.getMessage());
? ? ? ? return new CommonResult<>(e.getCode(), e.getMessage(), null);
? ? }
}

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

當(dāng)系統(tǒng)發(fā)生異常時(shí),會(huì)被 handleException 方法所捕獲,輸出異常日志,并返回一個(gè)業(yè)務(wù)失敗的結(jié)果。而當(dāng)業(yè)務(wù)異常發(fā)生時(shí),會(huì)被 handleBizException 方法所捕獲,返回該業(yè)務(wù)異常對(duì)應(yīng)的狀態(tài)碼、響應(yīng)消息和響應(yīng)數(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>來返回?cái)?shù)據(jù)給前端
throw new BizException(ResponseCode.FAIL);拋出異常后會(huì)在異常攔截器那里攔截統(tǒng)一進(jìn)行處理

6. 總結(jié)

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

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

相關(guān)文章

  • Maven打包沒有指定主類問題(xxx.jar中沒有主清單屬性)

    Maven打包沒有指定主類問題(xxx.jar中沒有主清單屬性)

    這篇文章主要介紹了Maven打包沒有指定主類問題(xxx.jar中沒有主清單屬性),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • java實(shí)現(xiàn)登錄之后抓取數(shù)據(jù)

    java實(shí)現(xiàn)登錄之后抓取數(shù)據(jù)

    這篇文章給大家分享了用JAVA實(shí)現(xiàn)在登陸以后抓取網(wǎng)站的數(shù)據(jù)的相關(guān)知識(shí),有興趣的朋友可以測(cè)試參考下。
    2018-07-07
  • 一篇文章帶你了解JAVA結(jié)構(gòu)化編程詳情

    一篇文章帶你了解JAVA結(jié)構(gòu)化編程詳情

    下面小編就為大家?guī)硪黄v解JAVA結(jié)構(gòu)化編程的文章。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-09-09
  • Spring中的@ControllerAdvice和ResponseBodyAdvice詳解

    Spring中的@ControllerAdvice和ResponseBodyAdvice詳解

    這篇文章主要介紹了Spring中的@ControllerAdvice和ResponseBodyAdvice詳解,@ControllerAdvice作用于@Controller修飾的類里面的所有方法,ResponseBodyAdvice作用于@ResponseBody注解修飾的方法,它可以對(duì)這些方法的返回值進(jìn)行修改,需要的朋友可以參考下
    2024-01-01
  • 詳解Maven Docker鏡像使用技巧

    詳解Maven Docker鏡像使用技巧

    這篇文章主要介紹了詳解Maven Docker鏡像使用技巧,Maven是目前最流行的Java項(xiàng)目管理工具之一,提供了強(qiáng)大的包依賴管理和應(yīng)用構(gòu)建功能。本文以Maven為例介紹了Docker在應(yīng)用構(gòu)建中的一些常見技巧。
    2018-06-06
  • springboot使用Hutool的JschUtil及下載安裝步驟

    springboot使用Hutool的JschUtil及下載安裝步驟

    這篇文章主要為大家介紹了springboot使用Hutool的JschUtil的方法及下載安裝詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Java?工具類實(shí)現(xiàn)音頻音量提升

    Java?工具類實(shí)現(xiàn)音頻音量提升

    本文主要介紹了可以將音頻提升音量的一個(gè)java工具類示例代碼,代碼具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴來了解一下吧,,希望能夠給你帶來幫助
    2021-11-11
  • 獲取Java線程轉(zhuǎn)儲(chǔ)的常用方法(推薦)

    獲取Java線程轉(zhuǎn)儲(chǔ)的常用方法(推薦)

    這篇文章主要介紹了獲取Java線程轉(zhuǎn)儲(chǔ)的常用方法,本文給大家介紹的非常想詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Java中final,finally,finalize?有什么區(qū)別

    Java中final,finally,finalize?有什么區(qū)別

    這篇文章主要給大家分享的是?Java中final,finally,finalize?到底有什么區(qū)別,文章圍繞final,finally,finalize的相關(guān)資料展開詳細(xì)內(nèi)容,具有一定的參考的價(jià)值,需要的朋友可以參考一下
    2021-11-11
  • SpringBoot與Kafka整合方案

    SpringBoot與Kafka整合方案

    本文將帶你全面掌握SpringBoot與Kafka 的整合方案,從環(huán)境搭建到高級(jí)特性,從代碼實(shí)現(xiàn)到性能調(diào)優(yōu),讓你既能理解底層原理,又能解決實(shí)際開發(fā)中的各種問題,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-10-10

最新評(píng)論

玉山县| 贵南县| 台前县| 张家港市| 临清市| 克什克腾旗| 禹州市| 奉化市| 白河县| 阳西县| 东乌珠穆沁旗| 绥棱县| 江津市| 普兰店市| 景泰县| 阳新县| 特克斯县| 乌兰浩特市| 承德县| 太仓市| 定南县| 邵东县| 宾川县| 迭部县| 青龙| 宁安市| 武夷山市| 襄樊市| 平舆县| 秭归县| 莱阳市| 江油市| 庐江县| 闵行区| 佛教| 通渭县| 卢氏县| 寿光市| 黑龙江省| 绿春县| 南安市|