spring boot 异常设计原理
生活随笔
收集整理的這篇文章主要介紹了
spring boot 异常设计原理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
spring boot 異常模板
查看瀏覽器請求應答信息如下:
請求返回信息以頁面形式返回 : Content-Type: text/html;charset=UTF-8
根據返回頁面類型查看spring boot源碼,找到返回類型為 text/html 的源碼,如下所示:
接口ErrorViewResolver 實現類 DefaultErrorViewResolver設置頁面名稱、頁面參數信息。
異常頁面查找過程
通過在項目頁面配置目錄下查找error子目錄中與返回異常狀態碼對應的頁面,以ModelAndView 對象形式返回。
本地不存在與狀態碼匹配的頁面,以默認名稱 :error.html 頁面返回。
本地存在error.html 頁面則返回本地文件,否則將返回spring boot 默認頁面。
頁面匹配查找源碼如下:
public class DefaultErrorViewResolver implements ErrorViewResolver, Ordered {// 異常狀態與對相應的頁面名稱private static final Map<Series, String> SERIES_VIEWS;static {Map<Series, String> views = new EnumMap<>(Series.class);/** HttpStatus類中枚舉信息:* CLIENT_ERROR(4),* SERVER_ERROR(5);*/views.put(Series.CLIENT_ERROR, "4xx");views.put(Series.SERVER_ERROR, "5xx");SERIES_VIEWS = Collections.unmodifiableMap(views);}@Overridepublic ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus status, Map<String, Object> model) {ModelAndView modelAndView = resolve(String.valueOf(status.value()), model);if (modelAndView == null && SERIES_VIEWS.containsKey(status.series())) {modelAndView = resolve(SERIES_VIEWS.get(status.series()), model);}return modelAndView;}private ModelAndView resolve(String viewName, Map<String, Object> model) {String errorViewName = "error/" + viewName;// 查找 error/名稱為異常狀態值的文件TemplateAvailabilityProvider provider = this.templateAvailabilityProviders.getProvider(errorViewName,this.applicationContext);if (provider != null) {return new ModelAndView(errorViewName, model);}return resolveResource(errorViewName, model);}......}debugger 調試結果如下圖:
當請求異常時返回頁面名稱為http網絡異常狀態碼
如果未找到http異常狀態碼對應的頁面時,會統一返回error.html頁面
通過debugger源碼得知此頁面名稱為 : error.html, 于是在 本地項目模板指定目錄下創建此文件,然后得到如下:
總結
以上是生活随笔為你收集整理的spring boot 异常设计原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL优化策略
- 下一篇: 前后端分离开发,日志应该如何进行记录,在