Spring boot 處理 error 的套路


Spring boot 處理 error 的基本流程:

Controller -> 發生錯誤 -> BasicErrorController -> 根據 @RequestMapping(produces) 判斷調用 errorHtml 或者 error 方法

然后:

errorHtml -> getErrorAttributes -> ErrorViewResolver -> 錯誤顯示頁面

error -> getErrorAttributes -> @ResponseBody (直接返回JSON)

如果想要定制一些東西,按照官方文檔的建議可以:

1.繼承 BasicErrorController  擴展處理一個新的 content type

2.自定義 ErrorAttributes 獲得自己想要的結果集

3.實現 ErrorViewResolver 接口,自定義錯誤顯示視圖

Spring boot 默認使用 DefaultErrorViewResolver 作為 ErrorViewResolver  的實現,並配置了 4xx, 5xx 視圖

 

一般的,並不需要擴展上面的內容,通常情況下,下面兩種方式可以應對大部分場景

1.捕獲異常:

使用 @ControllerAdvice 與 @ExceptionHandler 捕獲異常並處理(返回自定義json對象或是頁面視圖,將替代 ErrorAttributes、ErrorViewResolver)

注意:如 404 等是通過 Servlet (DispatcherServlet.noHandlerFound) 的處理並返回 response ( response.sendError) ,並未到達 Controller 層,所以並不能捕獲到。

2.直接提供相應錯誤顯示視圖,有兩種方式:

靜態頁面

創建 error 文件夾,頁面命名必須是 status code 或 4xx,位置在 Spring boot 靜態資源路徑下

模板頁面

使用模板頁面,默認只需將 error 文件夾放入 templates 下即可

但需要注意如果 prefix 與 suffix 配置 (freemarker),則存放目錄與文件后綴需要作相應的改變

3.覆蓋Spring boot 默認的 error 頁面

將命名為 error.ftl (注意匹配 prefix、suffix)的頁面放入 templates 下即可

注意:不要放入 error 文件夾下,這點與 4xx 頁面不同

默認全局的 error 頁面將顯示所有狀態下的錯誤信息,如果放入 4xx 等頁面后,將優先匹配 4xx 頁面 (根據 status code )


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM