作者:xbhog 鏈接:www.cnblogs.com/xbhog/p/15207278.html 異常處理: 背景: 最近在搭建屬於自己的個人博客(碼農小白的執念),自己搭建後端的時候首先考慮的是異常處理。個人也是一邊學習一邊做,難免有疏漏的地方,希望朋友們在不對的地方提醒下。 技術棧: spri ...
作者:xbhog
鏈接:www.cnblogs.com/xbhog/p/15207278.html
異常處理:
背景:
最近在搭建屬於自己的個人博客(碼農小白的執念),自己搭建後端的時候首先考慮的是異常處理。個人也是一邊學習一邊做,難免有疏漏的地方,希望朋友們在不對的地方提醒下。
技術棧:
- springBoot 2.5.3
- Mybatis-plus
- thymeleaf
- mysql
該博客簡單記錄一下自己的學習過程,如果後面作出簡單的demo來,那麼會整理其中的細節發佈出來。
推薦一個 Spring Boot 基礎教程及實戰示例:
https://github.com/javastacks/spring-boot-best-practice
異常處理
個人粗糙的學習和理解,我把異常錯誤分為三個,4xx,5xx,error(自定義)
常用的是404和500響應
- 404 (未找到) 伺服器找不到請求的網頁
- 伺服器內部錯誤 伺服器遇到錯誤,無法完成請求
在templates文件下創建404.html、500.html和error.html
如果創建的是4xx.html和5xx.html,那麼當頁面找不到或者程式內部錯誤的話,SpringBoot自動匹配到這兩個頁面,具體的源碼在這裡就不分析,感興趣的可以去學習下。
當我想將錯誤信息返回到我自定義的頁面怎麼寫?
我們自頂向下來思考:
- 我們訪問頁面的時候,頁面發生錯誤也好,找不到也好,是不是都要走它請求的Url,那我們怎麼處理這個請求呢?
- 這時候我們自然而然的想到攔截器,所以編寫ControllerExceptionHandler類,來專門攔截所有的異常請求。
- 當我們處理完異常後,把這個流放行,或者返回我們需要的自定義頁面上。
這樣就實現了我們上述的需求。
所需要的技術點:
- @ControllerAdvice
- 配合 @ExceptionHandler註解結合使用,當異常拋到controller層時,可以對異常進行統一的處理,規定返回的json格式或者跳轉到指定的錯誤頁面等.
- @ExceptionHandler(Exception.class) // 表示 捕獲 全部異常
- ModelAndView 其實就是兩個作用,一個是指定返回頁面,另一個是在返回頁面的同時添加屬性
通過Logger來列印獲取相關的異常信息:
//獲取異常的信息
logger.error(() -> {
return String.format("Request URL : %s,Exception : %s ", request.getRequestURL(),e);
},e);
在這裡自己走了一些彎路,小伙子自己走窄了,導包倒錯了