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

SpringBoot如何優(yōu)雅地處理全局異常詳解

 更新時間:2019年08月11日 09:31:55   作者:Coder小明  
這篇文章主要給大家介紹了關于SpringBoot如何優(yōu)雅地處理全局異常的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用SpringBoot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

前言

之前用springboot的時候,只知道捕獲異常使用try{}catch,一個接口一個try{}catch,這也是大多數(shù)開發(fā)人員異常處理的常用方式,雖然屢試不爽,但會造成一個問題,就是一個Controller下面,滿屏幕的try{}catch,看著一點都不優(yōu)雅,一點都不符合小明的氣質,憋了這么久,小明今天終于決定對所有異常實施統(tǒng)一處理的方案。

開發(fā)準備

JDK8、正常的springboot項目

代碼編寫

通用異常處理

其實Spring系列的項目全局異常處理方式早已存在,只不過我們一直忙于搬磚,很少停下腳步去審視這個日夜與我們相伴的朋友。為了貼合主題,本次主要針對SpringBoot全局異常處理進行舉例說明。

SpringBoot中有一個@ControllerAdvice的注解,使用該注解即表示開啟全局異常捕獲,接下來我們只需在自定義的方法上使用@ExceptionHandler注解,并定義捕獲異常的類型,對這種類型的異常進行統(tǒng)一的處理。

舉個例子:

假如我們需要針對NullException(空指針異常,是Java程序員最痛恨的異常,沒有之一)進行全局處理(如下所示)。

@RestControllerAdvice
public class GlobalExceptionHandler {
    /**
   * 處理空指針的異常
   * @param req
   * @param e
   * @return
   */
  @ExceptionHandler(value =NullPointerException.class)
  public BaseResponseFacade exceptionHandler(HttpServletRequest req, NullPointerException e){
    log.error("發(fā)生空指針異常!原因是:",e);
    return ResponseUtil.error(ResponseCode.ERROR);
  }
}

訥,就這么簡單。其他可能發(fā)生的異常,都可以以這種方式處理快速處理。此處大家應該表現(xiàn)的十分興奮,但請不要高興太早,因為接下來,有更令激動人心的事情。

自定義異常處理

自定義一個異常

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.experimental.Accessors;

/**
 * @Description 自定義異常
 * @Date 2019-08-05 15:49
 * @Created by 程序員小明
 */
@Data
@AllArgsConstructor
@Accessors(chain = true)
public class BizException extends RuntimeException {
  /**
   * 錯誤碼
   */
  protected Integer errorCode;
  /**
   * 錯誤信息
   */
  protected String errorMsg;
}

顯而易見,這個異常繼承了RuntimeException,屬于運行時異常。細心的朋友已經發(fā)現(xiàn),我使用了Lombok插件,非常契合今天的主題,給大家簡單介紹一下:

lombok是一個可以幫助我們簡化java代碼編寫的工具類,尤其是簡化javabean的編寫,即通過采用注解的方式,消除代碼中的構造方法,getter/setter等代碼,使我們寫的類更加簡潔(如果使用的IDE是idea,需要安裝插件哈)。

定義過之后,我們就可以和之前處理NullException方式一樣處理我們自定義的異常。包括處理其他異常,都是這種方式。直接貼代碼。

@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {

  /**
   * 處理自定義的業(yè)務異常
   * @param req
   * @param e
   * @return
   */
  @ExceptionHandler(value = BizException.class)
  public BaseResponseFacade bizExceptionHandler(HttpServletRequest req, BizException e){
    log.error("發(fā)生業(yè)務異常!原因是:{}",e.getErrorMsg());
    return ResponseUtil.error(e.getErrorCode(),e.getErrorMsg());
  }

  /**
   * 處理空指針的異常
   * @param req
   * @param e
   * @return
   */
  @ExceptionHandler(value =NullPointerException.class)
  public BaseResponseFacade exceptionHandler(HttpServletRequest req, NullPointerException e){
    log.error("發(fā)生空指針異常!原因是:",e);
    return ResponseUtil.error(ResponseCode.ERROR);
  }


  /**
   * 處理其他異常
   * @param req
   * @param e
   * @return
   */
  @ExceptionHandler(value =Exception.class)
  public BaseResponseFacade exceptionHandler(HttpServletRequest req, Exception e){
    log.error("未知異常!原因是:",e);
    return ResponseUtil.error(ResponseCode.INTERNAL_SERVER_ERROR);
  }
}

整個全局異常處理方式核心就是以上介紹這些。下面用一個Demo給大家舉個例子

@GetMapping("/test")
public BaseResponseFacade test(){
 if(true){
  throw new BizException(1,"error");
 }
 return ResponseUtil.success();
}

地址欄請求,進入這個方法后,會拋出異常,此時全局異常生效,就會返回異常處理過后的信息

{"errorCode":1,"errorMsg":"error","data":null}

到此整個流程都然跑通了。當然,好多地方都可以根據(jù)我們自身實際業(yè)務情況以此為基礎進一步豐富,比如返回數(shù)據(jù)可以改成跳轉某一個具體的頁面。這樣的出場方式是不是都很優(yōu)雅?

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

相關文章

  • SpringBoot如何實現(xiàn)一個實時更新的進度條的示例代碼

    SpringBoot如何實現(xiàn)一個實時更新的進度條的示例代碼

    本文詳細的介紹了SpringBoot如何實現(xiàn)一個實時更新的進度條,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • shiro無狀態(tài)web集成的示例代碼

    shiro無狀態(tài)web集成的示例代碼

    本篇文章主要介紹了shiro無狀態(tài)web集成的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 實體類或對象序列化時,忽略為空屬性的操作

    實體類或對象序列化時,忽略為空屬性的操作

    這篇文章主要介紹了實體類或對象序列化時,忽略為空屬性的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 一文讀懂Spring Cloud-Hystrix

    一文讀懂Spring Cloud-Hystrix

    這篇文章主要介紹了通過一文讀懂Spring Cloud-Hystrix的相關知識,本文分步驟通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 通過Spring Security魔幻山谷講解獲取認證機制核心原理

    通過Spring Security魔幻山谷講解獲取認證機制核心原理

    這篇文章主要介紹了通過Spring Security魔幻山谷講解獲取認證機制核心原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Spring ApplicationListener監(jiān)聽器用法詳解

    Spring ApplicationListener監(jiān)聽器用法詳解

    這篇文章主要介紹了Spring ApplicationListener監(jiān)聽器用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • 基于Java SSM實現(xiàn)Excel數(shù)據(jù)批量導入

    基于Java SSM實現(xiàn)Excel數(shù)據(jù)批量導入

    這篇文章主要為大家詳細介紹了基于Java SSM如何實現(xiàn)excel數(shù)據(jù)批量導入,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 一文徹底吃透SpringMVC中的轉發(fā)和重定向

    一文徹底吃透SpringMVC中的轉發(fā)和重定向

    大家應該都知道springmvc本來就會把返回的字符串作為視圖名解析,然后轉發(fā)到對應的視圖,這篇文章主要給大家介紹了關于SpringMVC中轉發(fā)和重定向的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-04-04
  • 通過ibatis解決sql注入問題

    通過ibatis解決sql注入問題

    這篇文章主要介紹了通過ibatis解決sql注入問題,需要的朋友可以參考下
    2017-09-09
  • 手寫Java?LockSupport的示例代碼

    手寫Java?LockSupport的示例代碼

    LockSupport給我們提供了一個非常強大的功能,它是線程阻塞最基本的元語,他可以將一個線程阻塞也可以將一個線程喚醒,因此經常在并發(fā)的場景下進行使用。本文將用60行代碼實現(xiàn)手寫LockSupport,需要的可以參考一下
    2022-08-08

最新評論

丁青县| 民丰县| 襄樊市| 米泉市| 安顺市| 铅山县| 温州市| 长海县| 新宁县| 东乡族自治县| 朝阳市| 余庆县| 天气| 浙江省| 思南县| 镇坪县| 安庆市| 海盐县| 雅安市| 龙川县| 钦州市| 揭阳市| 平山县| 安图县| 建始县| 平安县| 南郑县| 平泉县| 伊通| 英超| 恭城| 织金县| 浦北县| 即墨市| 双桥区| 荥经县| 横峰县| 鲜城| 十堰市| 铁岭市| 道孚县|