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

springboot?全局異常處理和統(tǒng)一響應(yīng)對(duì)象的處理方式

 更新時(shí)間:2022年06月28日 14:35:09   作者:豬仔讀我名字  
這篇文章主要介紹了springboot?全局異常處理和統(tǒng)一響應(yīng)對(duì)象,主要包括SpringBoot 默認(rèn)的異常處理機(jī)制和SpringBoot 全局異常處理,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下

springboot異常處理

SpringBoot 默認(rèn)的異常處理機(jī)制

默認(rèn)情況,SpringBoot 提供兩種不同響應(yīng)方式

  • 一種是瀏覽器客戶端請(qǐng)求一個(gè)不存在的頁(yè)面或服務(wù)端異常時(shí),SpringBoot默認(rèn)會(huì)響應(yīng)一個(gè)html
  • 另一種是使用postman等調(diào)試工具請(qǐng)求不存在的url或服務(wù)端異常時(shí),默認(rèn)返回json信息

SpringBoot 全局異常處理

一般我們不會(huì)將錯(cuò)誤信息返回前端,自己去try catch捕獲異常,但有個(gè)問題:每個(gè)方法都這樣捕獲異常,肯定是不合適,這是我們就需要全局的異常處理了。

@RestController
public class ExceptionController {
    @GetMapping("exceptionA")
    public void methodA() {
        try {
            int a = 100 / 0;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

1. 局部異常處理

使用@EceptionHandle注解實(shí)現(xiàn)某個(gè)類的局部異常處理

   @RestController
   public class ExceptionController {
   
       @GetMapping("exceptionA")
       public void methodA() {
           int a = 100 / 0;
       }
   
       /**
        * 局部異常處理
        */
       @ExceptionHandler(Exception.class)
       public String exHandler(Exception e) {
           // 判斷發(fā)生異常的類型是除0異常則做出響應(yīng)
           if (e instanceof ArithmeticException) {
               return "發(fā)生了除0異常";
           }
           // 未知的異常做出響應(yīng)
           return "發(fā)生了未知異常";
       }
   }

2. 全局異常處理

使用@ControllerAdvice +@ExceptionHandler注解實(shí)現(xiàn)全局異常處理

自定義一個(gè)異常類

@RestControllerAdvice
public class DefaultException {
?
    @ExceptionHandler({NullPointerException.class})
    public String exception(NullPointerException exception) {
        return "空指針異常";
?
    }
?
    @ExceptionHandler({IndexOutOfBoundsException.class})
    public String exception(IndexOutOfBoundsException exception) {
        return "數(shù)組越界異常";
    }
}

增加一個(gè)異常方法測(cè)試,由于局部異常優(yōu)先級(jí)更高先注釋掉了

@RestController
public class ExceptionController {
?
    @GetMapping("exceptionA")
    public void methodA() {
        int a = 100 / 0;
    }
?
    @GetMapping("exceptionB")
    public void methodB() {
        List list = new ArrayList<>();
        System.out.println(list.get(0));
    }
?
    /**
     * 局部異常處理
     */
    //@ExceptionHandler(Exception.class)
    //public String exHandler(Exception e) {
    //    // 判斷發(fā)生異常的類型是除0異常則做出響應(yīng)
    //    if (e instanceof ArithmeticException) {
    //        return "發(fā)生了除0異常";
    //    }
    //    // 未知的異常做出響應(yīng)
    //    return "發(fā)生了未知異常";
    //}
}

全局異常注解已生效

自定義異常

自定義異常只需要繼承exception類或其子類

@Data
@NoArgsConstructor
public class CustomException extends Exception {
?
    private static final long serialVersionUID = 1L;
?
    private Integer code;
?
    private String mes;
?
    /**
     * @param code 狀態(tài)碼
     * @param msg  異常返回信息
     * @description 構(gòu)造器
     */
    public CustomException(Integer code, String msg) {
        super(msg);
        this.code = code;
    }
}

使用時(shí)可以直接拋出異常對(duì)象

@GetMapping("exceptionC")
public void methodC() throws CustomException {
    int a = 1;
    if (a == 1) {
        throw new CustomException(10086, "自定義異常");
    }
}

統(tǒng)一響應(yīng)對(duì)象

實(shí)際開發(fā)中我們需要封裝統(tǒng)一的響應(yīng)對(duì)象,區(qū)分狀態(tài)碼和信息,以便前端處理。

定義統(tǒng)一的響應(yīng)對(duì)象

一般包含狀態(tài)碼,錯(cuò)誤信息,數(shù)據(jù)等。

自定義一些方法用來返回信息,比如我定義的success(),failed()方法

@Data
@NoArgsConstructor
@AllArgsConstructor
public class R<T> {
    /**
     * 返回狀態(tài)碼
     */
    private Integer code;
    /**
     * 返回信息
     */
    private String msg;
    /**
     * 數(shù)據(jù)
     */
    private T data;
?
    public static R success() {
        return new R(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMsg(), null);
    }
?
    public static R success(Object data) {
        return new R(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMsg(), data);
    }
?
    public static R failed() {
        return new R(ResultCode.FAILED.getCode(), ResultCode.FAILED.getMsg(), null);
    }
?
    public static R failed(String msg) {
        return new R(ResultCode.FAILED.getCode(), msg, null);
    }
?
    public static R failed(int code, String msg) {
        return new R(code, msg, null);
    }
}

枚舉信息

枚舉一些常用的狀態(tài)信息

我就舉個(gè)例子,只枚舉2個(gè),根據(jù)需要去自定義

@NoArgsConstructor
@AllArgsConstructor
public enum ResultCode {
?
    SUCCESS(200, "請(qǐng)求成功"),
    FAILED(500, "服務(wù)器錯(cuò)誤");
?
    private int code;
    private String msg;
?
    public int getCode() {
        return code;
    }
?
    public void setCode(int code) {
        this.code = code;
    }
?
    public String getMsg() {
        return msg;
    }
?
    public void setMsg(String msg) {
        this.msg = msg;
    }
}

響應(yīng)對(duì)象

使用時(shí)直接返回定義的對(duì)象類型就行了,將定義的全局異常返回類型也改成統(tǒng)一的響應(yīng)對(duì)象

@RestControllerAdvice
public class DefaultException {
    @ExceptionHandler({CustomException.class})
    public R exception(CustomException e) {
        return R.failed(e.getCode(),e.getMessage());
    }

    @ExceptionHandler({Exception.class})
    public R exception(Exception e) {
        return R.failed(e.getMessage());
    }
}

全局異常和響應(yīng)對(duì)象的簡(jiǎn)單介紹就這樣了,歡迎補(bǔ)充指正。

gitee地址:gitee.com/rainscloud/…

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

相關(guān)文章

  • Java進(jìn)程cpu占用過高問題解決

    Java進(jìn)程cpu占用過高問題解決

    這篇文章主要介紹了Java進(jìn)程cpu占用過高問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • mybatis中使用InsertProvider注解報(bào)錯(cuò)解決全過程

    mybatis中使用InsertProvider注解報(bào)錯(cuò)解決全過程

    這篇文章主要介紹了mybatis中使用InsertProvider注解報(bào)錯(cuò)解決全過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • java高并發(fā)InterruptedException異常引發(fā)思考

    java高并發(fā)InterruptedException異常引發(fā)思考

    這篇文章主要為大家介紹了java高并發(fā)InterruptedException異常引發(fā)思考,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 詳解通過maven運(yùn)行項(xiàng)目的兩種方式

    詳解通過maven運(yùn)行項(xiàng)目的兩種方式

    這篇文章主要介紹了通過maven運(yùn)行項(xiàng)目的兩種方式,給大家提到了通過tomcat的方式來啟動(dòng)maven項(xiàng)目的方法,通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-12-12
  • 詳解SpringMVC中的@RequestMapping注解

    詳解SpringMVC中的@RequestMapping注解

    這篇文章主要介紹了SpringMVC中@RequestMapping注解,@RequestMapping注解是一個(gè)用來處理請(qǐng)求地址映射的注解,可用于映射一個(gè)請(qǐng)求或一個(gè)方法,可以用在類或方法上,需要的朋友可以參考下
    2023-07-07
  • SpringBoot 2 統(tǒng)一異常處理過程解析

    SpringBoot 2 統(tǒng)一異常處理過程解析

    這篇文章主要介紹了SpringBoot 2 統(tǒng)一異常處理過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • maven如何使用profiles多環(huán)境配置

    maven如何使用profiles多環(huán)境配置

    在軟件開發(fā)過程中,我們經(jīng)常需要在不同的環(huán)境中部署和運(yùn)行我們的應(yīng)用程序,例如開發(fā)環(huán)境、測(cè)試環(huán)境和生產(chǎn)環(huán)境,為了方便管理和配置不同環(huán)境下的參數(shù),我們可以使用Maven的profiles功能,本文給大家介紹maven如何使用profiles多環(huán)境配置,感興趣的的朋友一起看看吧
    2024-02-02
  • Elasticsearch?自動(dòng)重啟腳本創(chuàng)建實(shí)現(xiàn)

    Elasticsearch?自動(dòng)重啟腳本創(chuàng)建實(shí)現(xiàn)

    這篇文章主要為大家介紹了Elasticsearch?自動(dòng)重啟腳本創(chuàng)建實(shí)現(xiàn)詳解分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • JDK源碼之PriorityQueue解析

    JDK源碼之PriorityQueue解析

    這篇文章主要為大家詳細(xì)介紹了JDK源碼之PriorityQueue,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Java實(shí)現(xiàn)JDBC批量插入原理詳解

    Java實(shí)現(xiàn)JDBC批量插入原理詳解

    在JDBC中,executeBatch這個(gè)方法可以將多條dml語句批量執(zhí)行,效率比單條執(zhí)行executeUpdate高很多,這是什么原理呢?在mysql和oracle中又是如何實(shí)現(xiàn)批量執(zhí)行的呢?本文將給大家介紹這背后的原理
    2023-03-03

最新評(píng)論

阳谷县| 南涧| 柳林县| 镇远县| 东光县| 长治市| 朝阳区| 太原市| 嘉义县| 迁西县| 汉中市| 衡阳市| 禹城市| 密山市| 故城县| 黄陵县| 监利县| 松江区| 哈巴河县| 来凤县| 新干县| 曲沃县| 云南省| 江津市| 肇州县| 琼结县| 鄯善县| 璧山县| 巴林右旗| 文山县| 灵璧县| 青海省| 永康市| 安顺市| 霍州市| 高唐县| 罗甸县| 涡阳县| 贡觉县| 邹城市| 英超|