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

SpringBoot統(tǒng)一響應(yīng)和統(tǒng)一異常處理詳解

 更新時(shí)間:2024年08月01日 10:22:52   作者:奮斗的狍子007  
在開發(fā)Spring Boot應(yīng)用時(shí),處理響應(yīng)結(jié)果和異常的方式對項(xiàng)目的可維護(hù)性、可擴(kuò)展性和團(tuán)隊(duì)協(xié)作有著至關(guān)重要的影響,統(tǒng)一結(jié)果返回和統(tǒng)一異常處理是提升項(xiàng)目質(zhì)量的關(guān)鍵策略之一,所以本文給大家詳細(xì)介紹了SpringBoot統(tǒng)一響應(yīng)和統(tǒng)一異常處理,需要的朋友可以參考下

一、前言

在開發(fā)Spring Boot應(yīng)用時(shí),處理響應(yīng)結(jié)果和異常的方式對項(xiàng)目的可維護(hù)性、可擴(kuò)展性和團(tuán)隊(duì)協(xié)作有著至關(guān)重要的影響。分散的響應(yīng)結(jié)果和異常處理邏輯往往會(huì)導(dǎo)致代碼冗余、難以理解和維護(hù)。因此,統(tǒng)一結(jié)果返回和統(tǒng)一異常處理是提升項(xiàng)目質(zhì)量的關(guān)鍵策略之一。

二、統(tǒng)一結(jié)果返回

統(tǒng)一結(jié)果返回通常意味著為所有控制器方法定義一個(gè)標(biāo)準(zhǔn)的響應(yīng)格式。這可以通過創(chuàng)建一個(gè)或多個(gè)響應(yīng)實(shí)體類來實(shí)現(xiàn),這些類包含了狀態(tài)碼、消息和數(shù)據(jù)等通用字段??刂破鞣椒ㄔ谔幚硗陿I(yè)務(wù)邏輯后,會(huì)填充這些字段并返回給客戶端。

接下來讓我們一起看看在SpringBoot中如何實(shí)現(xiàn)統(tǒng)一結(jié)果返回。

1. 定義通用的響應(yīng)對象

創(chuàng)建一個(gè)通用響應(yīng)對象,定義成功和失敗的返回場景,并確保該通用返回對象在接口中得到使用。

public class ResponseResult {

    private int code;

    private String message;

    private Object data;

    public static ResponseResult success(Object data) {
        ResponseResult responseResult = new ResponseResult();
        responseResult.setData(data);
        responseResult.setCode(ResultEnum.SUCCESS.code);
        return responseResult;
    }

    public static ResponseResult error(ResultEnum resultEnum) {
        return error(resultEnum, resultEnum.message);
    }

    public static ResponseResult error(ResultEnum resultEnum, String message) {
        ResponseResult responseResult = new ResponseResult();
        responseResult.setCode(resultEnum.code);
        responseResult.setMessage(message);
        return responseResult;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

2. 定義接口響應(yīng)狀態(tài)碼

定義一組公共狀態(tài)碼是統(tǒng)一結(jié)果返回的核心關(guān)鍵之一。這種做法不僅提高了API的易用性和可維護(hù)性,還使得客戶端能夠更高效地解析和處理響應(yīng)數(shù)據(jù),同時(shí)也為API的開發(fā)者提供了一個(gè)清晰、一致的標(biāo)準(zhǔn)來遵循。

public enum ResultEnum {

    SUCCESS(200 ,"請求處理成功"),
    SERVICE_ERROR(500, "服務(wù)器異常,請稍后重試");

    public final Integer code;

    public final String message;

    ResultEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }
}

3. 定義統(tǒng)一的成功和失敗的處理方法

public class ResponseResult {

    private int code;

    private String message;

    private Object data;

    public static ResponseResult success(Object data) {
        ResponseResult responseResult = new ResponseResult();
        responseResult.setData(data);
        responseResult.setCode(ResultEnum.SUCCESS.code);
        return responseResult;
    }

    public static ResponseResult error(ResultEnum resultEnum) {
        return error(resultEnum, resultEnum.message);
    }

    public static ResponseResult error(ResultEnum resultEnum, String message) {
        ResponseResult responseResult = new ResponseResult();
        responseResult.setCode(resultEnum.code);
        responseResult.setMessage(message);
        return responseResult;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

4. Controller統(tǒng)一響應(yīng)結(jié)果

@GetMapping("/testResult")
 public ResponseResult test() {
     // 模擬業(yè)務(wù)邏輯
     try {
         // 假設(shè)這里有一些業(yè)務(wù)邏輯
         return ResponseResult.success("success");
     } catch (Exception e) {
         // 捕獲異常并返回錯(cuò)誤信息
         return ResponseResult.error(ResultEnum.SERVICE_ERROR);
     }
 }

三、統(tǒng)一異常處理

統(tǒng)一異常處理則是通過全局異常處理器來捕獲并處理控制器中拋出的異常。這種方式可以避免在每個(gè)控制器方法中編寫重復(fù)的異常處理代碼,同時(shí)也使得異常處理邏輯更加集中和易于管理。

@RestControllerAdvice

@RestControllerAdvice 是一個(gè)組合注解,它是 @ControllerAdvice 和 @ResponseBody 的結(jié)合體。它主要用于為控制器(Controller)層提供全局的配置,如異常處理、數(shù)據(jù)綁定、數(shù)據(jù)預(yù)處理等。由于它包含了 @ResponseBody,所以所有通過 @RestControllerAdvice 處理的方法都會(huì)默認(rèn)將返回值寫入HTTP響應(yīng)體中,并設(shè)置合適的Content-Type。

@ExceptionHandler

@ExceptionHandler注解用于標(biāo)記一個(gè)方法,該方法用于處理控制器中拋出的異常。當(dāng)控制器中的方法拋出異常時(shí),Spring會(huì)查找是否有@ExceptionHandler注解的方法能夠處理該異常。如果有,則調(diào)用該方法,并返回其響應(yīng)。

注意

當(dāng)使用@ControllerAdvice時(shí),我們需要將@ResponseBody添加到異常處理方法上。
如果我們使用@RestControllerAdvice,就不需要添加。

1.定義業(yè)務(wù)異常類

統(tǒng)一異常類可以幫助你更好地管理錯(cuò)誤和異常,使得整個(gè)系統(tǒng)的錯(cuò)誤處理更加一致和可預(yù)測。

public class BusinessException extends RuntimeException{

    private final ResultEnum resultEnum;

    public BusinessException(ResultEnum resultEnum, String message) {
        super(message);
        this.resultEnum = resultEnum;
    }

    public BusinessException(ResultEnum resultEnum) {
        this(resultEnum, resultEnum.message);
    }


}

2. 全局異常處理器

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler({BusinessException.class})
    public ResponseResult handleBusinessException(BusinessException businessException, HttpServletRequest request) {
        // 想處理的業(yè)務(wù)
        return ResponseResult.error(ResultEnum.SERVICE_ERROR, businessException.getMessage());
    }

    /**
     * 其他異常
     * @param e
     * @return
     */
    @ExceptionHandler(value = Exception.class)
    public ResponseResult handleOtherExceptions(Exception e) {
        // 這里可以根據(jù)不同的異常類型返回不同的狀態(tài)碼和消息
        // 但為了簡單起見,這里只返回一個(gè)通用的錯(cuò)誤信息
        return ResponseResult.error(ResultEnum.SERVICE_ERROR);
    }

}

3. 統(tǒng)一處理使用

@GetMapping("/testException1")
    public ResponseResult test1() {
        if (true) {
            // 業(yè)務(wù)場景
            throw new BusinessException(ResultEnum.SERVICE_ERROR);
        }

        return ResponseResult.success("success");
    }

統(tǒng)一異常處理使用好處

代碼復(fù)用:避免了在多個(gè)地方編寫相似的響應(yīng)結(jié)果和異常處理代碼。

易于維護(hù):當(dāng)需要修改響應(yīng)格式或異常處理邏輯時(shí),只需在一個(gè)地方進(jìn)行修改。

團(tuán)隊(duì)協(xié)作:團(tuán)隊(duì)成員可以更容易地理解和遵循統(tǒng)一的編碼規(guī)范。

擴(kuò)展性:如果需要添加新的響應(yīng)類型或異常處理邏輯,只需在現(xiàn)有基礎(chǔ)上進(jìn)行擴(kuò)展。

到此這篇關(guān)于SpringBoot統(tǒng)一響應(yīng)和統(tǒng)一異常處理詳解的文章就介紹到這了,更多相關(guān)SpringBoot統(tǒng)一相應(yīng)和異常處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • RocketMQ的兩種消費(fèi)模式詳解

    RocketMQ的兩種消費(fèi)模式詳解

    這篇文章主要介紹了RocketMQ的兩種消費(fèi)模式詳解,RocketMQ主要提供了兩種消費(fèi)模式,集群消費(fèi)以及廣播消費(fèi),我們只需要在定義消費(fèi)者的時(shí)候通過setMessageModel(MessageModel.XXX),需要的朋友可以參考下
    2023-10-10
  • java解析XML幾種方式小結(jié)

    java解析XML幾種方式小結(jié)

    本文給大家匯總了4種java解析XML的方法,結(jié)合具體的示例,非常的詳細(xì),有需要的小伙伴可以參考下
    2016-01-01
  • RabbitMQ的核心原理場景解析及具體應(yīng)用

    RabbitMQ的核心原理場景解析及具體應(yīng)用

    RabbitMQ是基于AMQP的開源消息中間件,通過靈活路由、可靠性保障和高可用特性,實(shí)現(xiàn)服務(wù)解耦、流量緩沖及異步通信,本文梳理RabbitMQ 的核心知識(shí),并結(jié)合實(shí)戰(zhàn)場景解析其在項(xiàng)目中的具體應(yīng)用,感興趣的朋友一起看看吧
    2025-08-08
  • Java中Cglib代理和JDK代理的區(qū)別詳解

    Java中Cglib代理和JDK代理的區(qū)別詳解

    這篇文章主要介紹了Java中Cglib代理和JDK代理的區(qū)別詳解,Cglib代理功能更強(qiáng),無論目標(biāo)類是否實(shí)現(xiàn)了接口都可以代理,他是基于繼承的方式來代理目標(biāo)類,如果目標(biāo)類也實(shí)現(xiàn)了接口,代理類也會(huì)實(shí)現(xiàn)一次,需要的朋友可以參考下
    2023-09-09
  • SpringBoot整合WebSocket實(shí)現(xiàn)實(shí)時(shí)通信功能

    SpringBoot整合WebSocket實(shí)現(xiàn)實(shí)時(shí)通信功能

    在當(dāng)今互聯(lián)網(wǎng)時(shí)代,實(shí)時(shí)通信已經(jīng)成為了許多應(yīng)用程序的基本需求,而WebSocket作為一種全雙工通信協(xié)議,為開發(fā)者提供了一種簡單、高效的實(shí)時(shí)通信解決方案,本文將介紹如何使用SpringBoot框架來實(shí)現(xiàn)WebSocket的集成,快速搭建實(shí)時(shí)通信功能,感興趣的朋友可以參考下
    2023-11-11
  • SpringBoot設(shè)置接口超時(shí)的方法小結(jié)

    SpringBoot設(shè)置接口超時(shí)的方法小結(jié)

    這篇文章主要介紹了SpringBoot設(shè)置接口超時(shí)的方法小結(jié),包括配置文件,config配置類及相關(guān)示例代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Java程序員面試中的多線程問題總結(jié)

    Java程序員面試中的多線程問題總結(jié)

    這篇文章收集了 Java 線程方面一些典型的問題,這些問題經(jīng)常被高級(jí)工程師所問到。這篇文章收集了 Java 線程方面一些典型的問題,這些問題經(jīng)常被高級(jí)工程師所問到。
    2016-11-11
  • SpringBoot+EasyPOI實(shí)現(xiàn)百萬級(jí)數(shù)據(jù)導(dǎo)出Excel實(shí)戰(zhàn)指南

    SpringBoot+EasyPOI實(shí)現(xiàn)百萬級(jí)數(shù)據(jù)導(dǎo)出Excel實(shí)戰(zhàn)指南

    這篇文章主要為大家詳細(xì)介紹了一款基于 EasyPOI 和 Apache POI SXSSF 的批量Excel導(dǎo)出工具類 BatchExcelExporter,支持大數(shù)據(jù)量分頁處理,下面小編就來和大家詳細(xì)介紹一下吧
    2025-09-09
  • SpringBoot使用SOFA-Lookout監(jiān)控的方法

    SpringBoot使用SOFA-Lookout監(jiān)控的方法

    本文介紹SpringBoot使用螞蟻金服SOFA-Lookout配合Prometheus進(jìn)行監(jiān)控,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03
  • Java8新特性 StreamAPI實(shí)例詳解

    Java8新特性 StreamAPI實(shí)例詳解

    這篇文章主要為大家介紹了Java8新特性 StreamAPI實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11

最新評(píng)論

玉门市| 长乐市| 西和县| 昭平县| 察哈| 会宁县| 宁城县| 惠安县| 渝中区| 贵港市| 灌南县| 漾濞| 达州市| 永修县| 灵石县| 岑溪市| 当涂县| 含山县| 嘉祥县| 富锦市| 曲靖市| 赤峰市| 来凤县| 东至县| 西林县| 阿克苏市| 蓬安县| 彩票| 信丰县| 华蓥市| 大港区| 姜堰市| 奉节县| 尉犁县| 锡林郭勒盟| 井陉县| 巴彦县| 比如县| 昌黎县| 凉城县| 绩溪县|