日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

springboot(2.2.4)全局异常处理(RestControllerAdvice,ExceptionHandler)

發布時間:2024/9/30 编程问答 71 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot(2.2.4)全局异常处理(RestControllerAdvice,ExceptionHandler) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

當程序出現異常我們一般try,catch處理,這樣代碼結構不好看,我們希望程序員寫的代碼業務和框架是分離的,通過注解進行綁定使用。springboot里通過@RestControllerAdvice注解定義全局異常處理類,通過@ExceptionHandler(異常類型.class)攔截對應的異常。

我希望實現的是,前臺發出請求,如果后臺發生異常,后臺把異常信息輸出到日志,返回給前臺500錯誤碼和我們自定義的錯誤message而不是返回整個錯誤堆棧給前臺,雖然前段框架比如Vue、React等有自己的請求返回數據結構,但是如果發生異常還是會得到整個堆棧信息,對客戶不友好,當然我們前臺也可以對這些異常進行處理進而給用戶比較友好的界面,但是后臺的錯誤應該由后臺處理較合適。比較適用于前后端分離的架構。代碼如下:

package com.example.demo.exception;import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.web.bind.annotation.RestControllerAdvice; import com.alibaba.fastjson.JSONObject; import com.example.demo.util.Constant;/*** @author lijinfei* @Desc* @date 2020/3/26 14:45 Version: 1.0*/ @RestControllerAdvice public class ExceptionHandler {private static final Logger logger = LogManager.getLogger(ExceptionHandler.class);private static final String ERROR_MESSAGE = "后臺跑丟了,sorry";@org.springframework.web.bind.annotation.ExceptionHandler(Exception.class)public Object handlerException(Exception e) {// 返回給前臺JSONObject jsonObject = new JSONObject();jsonObject.put(Constant.STATUS, 500);jsonObject.put(Constant.MESSAGE, ERROR_MESSAGE);// 日志記錄錯誤,包括堆棧信息logger.error(e.getMessage(), e);return jsonObject;}// 這個異常ArithmeticException粒度小于Exception,如果發生這個異常,則被此方法攔截//@org.springframework.web.bind.annotation.ExceptionHandler(ArithmeticException.class)// public Object handArithmeticException(Exception e) {// JSONObject jsonObject = new JSONObject();// jsonObject.put(Constant.STATUS, 501);// jsonObject.put(Constant.MESSAGE, e.getMessage());// logger.error(e.getMessage(), e);// return jsonObject;// } }

注釋掉的這個攔截ArithmeticException異常的方法,如果發生ArithmeticException,會使用這個方法處理,因為ArithmeticException粒度小于Exception。我們可以定義各種各樣的異常攔截,比如空指針、參數錯誤、數學異常等很多的RuntimeException,也可以自定義異常類進行攔截。我感覺沒有必要,?當異常發生后真正有用的信息是堆棧信息,所以只需要一個總得Exception就夠了,把堆棧信息寫到日志里便于跟蹤定位就行。歡迎批評指正。

?

總結

以上是生活随笔為你收集整理的springboot(2.2.4)全局异常处理(RestControllerAdvice,ExceptionHandler)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。