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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

spring boot 异常设计原理

發布時間:2025/3/19 编程问答 8 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring boot 异常设计原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

spring boot 異常模板


查看瀏覽器請求應答信息如下:

請求返回信息以頁面形式返回 : Content-Type: text/html;charset=UTF-8
根據返回頁面類型查看spring boot源碼,找到返回類型為 text/html 的源碼,如下所示:

// 接收https請求,以text/html 數據格式返回 @RequestMapping(produces = MediaType.TEXT_HTML_VALUE) public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {// 異常狀態值HttpStatus status = getStatus(request);Map<String, Object> model = Collections.unmodifiableMap(getErrorAttributes(request, isIncludeStackTrace(request, MediaType.TEXT_HTML)));response.setStatus(status.value());ModelAndView modelAndView = resolveErrorView(request, response, status, model);// 返回頁面及數據return (modelAndView != null) ? modelAndView : new ModelAndView("error", model);}

接口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 异常设计原理的全部內容,希望文章能夠幫你解決所遇到的問題。

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