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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Springboot对web应用的统一异常处理

發布時間:2024/4/14 javascript 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Springboot对web应用的统一异常处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們在做Web應用的時候,請求處理過程中發生錯誤是非常常見的情況。Spring Boot提供了一個默認的映射:/error,當處理中拋出異常之后,會轉到該請求中處理,并且該請求有一個全局的錯誤頁面用來展示異常內容。

默認情況下,Spring Boot為兩種情況提供了不同的響應方式
1、當瀏覽器發送請求頭是Accept: text/html;Spring Boot默認會響應一個html文檔內容,稱作“Whitelabel Error Page”。

2、當使用postman等調試工具發送請求一個不存在的url或服務端處理發生異常時,Spring Boot會返回類似如下的Json格式字符串信息。

{"timestamp": "2019-05-31T06:11:45.209+0000","status": 404,"error": "Not Found","message": "No message available","path": "/index.html" }

Spring Boot 默認提供了程序出錯的結果映射路徑/error。這個/error請求會在BasicErrorController中處理,其內部是通過判斷請求頭中的Accept的內容是否為text/html來區分請求是來自客戶端瀏覽器(瀏覽器通常默認自動發送請求頭內容Accept:text/html)還是客戶端接口的調用,以此來決定返回頁面視圖還是 JSON 消息內容。處理源碼如下:

全局統一異常處理

Springboot中定義了默認的error錯誤映射,但是在實際項目使用中,這些默認的錯誤映射對我們來說并不實用,所以我們需要實現符合實際業務場景的異常提示。本文我們來學習springboot針對web應用的統一異常處理。

  • 局部異常處理 @Controller + @ExceptionHandler
  • 全局異常處理 @ControllerAdvice + @ExceptionHandler

1、局部異常處理 @Controller + @ExceptionHandler

局部異常主要用到的是@ExceptionHandler注解,此注解注解到類的方法上,當此注解里定義的異常拋出時,此方法會被執行。如果@ExceptionHandler所在的類是@Controller,則此方法只作用在此類。如果@ExceptionHandler所在的類帶有@ControllerAdvice注解,則此方法會作用在全局。

2、全局異常處理 @ControllerAdvice + @ExceptionHandler

SpringBoot全局異常處理

SpringBoot中有一個ControllerAdvice的注解,使用該注解表示開啟了全局異常的捕獲,我們只需在自定義一個方法使用ExceptionHandler注解然后定義捕獲異常的類型即可對這些捕獲的異常進行統一的處理。

注意:基于@ControllerAdvice注解的全局異常統一處理只能針對于Controller層的異常,簡單的說,進入Controller層的錯誤才會由@ControllerAdvice處理,攔截器拋出的錯誤以及訪問錯誤地址的情況@ControllerAdvice處理不了,由SpringBoot默認的異常處理機制處理。

使用@ControllerAdvice或者@RestControllerAdvice定義統一的全局異常處理類,而不是在controller中逐個定義。使用@ExceptionHandler來定義函數針對的異常類型。

@RestControllerAdvice 類似于 @RestController 與 @Controller的區別

全局統一異常示例

上面說了springboot異常原理,在實際開發中,如果是要實現RESTful API,那么默認的JSON錯誤信息就不是我們想要的(本質上,只需在@ExceptionHandler之后加入@ResponseBody,就能讓處理函數return的內容轉換為JSON格式。),這時候就需要統一一下JSON格式,所以常常自己要封裝一下。封裝后的數據返回如下:

正確的時候

{code:200,msg:“獲取列表成功”,data:{ queryList :[]} }

錯誤的時候

{code:500,msg:“未知異常,請聯系管理員” } import java.io.Serializable;/*** 自定義標準響應格式* @author: liumengbing* @date: 2019/05/31 16:35**/ public class ResponseModel implements Serializable {private Integer status;//響應狀態碼private String message;//響應信息private Object data;//響應內容public ResponseModel() {}public ResponseModel(Integer status, String message) {this.status = status;this.message = message;}public ResponseModel(Integer status, String message, Object data) {this.status = status;this.message = message;this.data = data;}//getter and setter …} /*** 自定義異常,這里要繼承runtimeException是因為spring框架對運行時異常會進行回滾,如果是exception就不會了* @author: liumengbing* @date: 2019/05/31 17:03**/ public class MyException extends RuntimeException {private int code;private Object data;public MyException() {}public MyException(int code, String message) {super(message);this.code = code;}public MyException(int code, String message, Object data) {super(message);this.code = code;this.data = data;}public int getCode() {return code;}public Object getData() {return data;}@Overridepublic String toString() {return "MyException{" +"code=" + code +", data=" + data +", message=" + getMessage() +'}';} } /*** 全局異常處理類* @author: liumengbing* @date: 2019/05/31 16:36**/ @ControllerAdvice public class GlobalExceptionHandler {/*** 當發生Exception異常時,執行此方法* @param e* @return*/@ExceptionHandler(Exception.class)@ResponseBodypublic ResponseModel exHandler(Exception e) {// 判斷發生異常的類型是除0異常則做出響應if (e instanceof ArithmeticException) {return new ResponseModel(500,"發生了除0異常");}// 未知的異常做出響應return new ResponseModel(500,"發生了未知異常");}/*** 當發生MyException異常時,執行此方法* @param myException* @return*/@ExceptionHandler(MyException.class)@ResponseBodypublic ResponseModel exHandler(MyException myException) {return new ResponseModel(500,"發生了MyException");}}

測試接口

/*** @author: liumengbing* @date: 2019/05/31 16:35**/ @Controller public class TestController {@RequestMapping("/test")@ResponseBodypublic String test() {throw new MyException();} }

總結

以上是生活随笔為你收集整理的Springboot对web应用的统一异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 理论片在线观看视频 | 91精品久久久久久久久久久 | 国产浮力第一页 | 在线天堂视频 | 午夜少妇久久久久久久久 | 99综合在线| 秋霞毛片 | 香蕉依人| 最新av在线网站 | 午夜视频网站 | 婷婷伊人久久 | 久久人人爽人人爽 | 日本成人一级片 | 亚洲人人夜夜澡人人爽 | 天堂网2020 | 18禁一区二区三区 | 麻豆网址 | 欧美精品在线一区二区 | 色综合久久久久 | 国产人久久人人人人爽 | 免费毛片软件 | 91tv在线观看 | 91精品国产乱码在线观看 | 狠狠的干狠狠的操 | 东方伊甸园av在线 | 91在线观看欧美日韩 | 国产精品亚洲一区二区 | 91精品人妻一区二区三区果冻 | youjizz自拍 | 亚洲在线电影 | 精品一区二区三区在线免费观看 | 91资源在线观看 | 国产制服91一区二区三区制服 | 手机在线播放av | 中文字幕精品无码一区二区 | 超碰在线亚洲 | 国产精品一级片在线观看 | 色综合综合网 | 在线一区二区三区四区五区 | 中文字幕一区二区人妻在线不卡 | 美女高潮流白浆视频 | 黄色专区 | 国产综合无码一区二区色蜜蜜 | 欧美高清精品 | 特级黄色大片 | 欧美精品在线一区 | 美女国产精品 | 制服丝袜中文字幕在线 | 在线人成 | 婷婷激情电影 | 成人在线91 | 亚洲系列中文字幕 | 亚洲大色网 | 97在线观看视频免费 | 色欲av无码精品一区 | 根深蒂固在线观看 | 日韩成人高清在线 | av高清一区二区 | 奇米成人网 | 欧美日皮视频 | 欧美黄频 | 久久不卡日韩美女 | 91久久综合| 亚洲码欧美码一区二区三区 | 日韩在线视频免费 | 男ji大巴进入女人的视频 | 九九九九九精品 | 国产精品白浆一区二小说 | 国产网站视频 | 美女啪啪国产 | 午夜影院黄色 | 日韩欧美在线观看免费 | 娇妻玩4p被三个男人伺候电影 | 午夜精品久久久久久久96蜜桃 | 国产午夜精品在线 | 日日爱夜夜操 | 一起操在线 | 窝窝午夜精品一区二区 | 国产精品一区在线播放 | 日本三级韩国三级三级a级按摩 | 亚洲 欧美 综合 | 国产成人精品一区二区三区视频 | 亚洲一二三四在线 | 女的被男的操 | 插插插操操操 | 婷婷综合五月 | 天天干天天操天天爱 | av网址免费在线观看 | 日韩三级免费观看 | se婷婷 | 女人被狂躁60分钟视频 | 香蕉网久久 | 青青草视频成人 | 久久午夜鲁丝片 | 综合网在线视频 | 麻豆视频在线看 | 456亚洲影院 | 亚州欧美在线 | 日韩毛片在线观看 |