精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

詳解SpringBoot錯誤處理

開發 前端
如果要顯示給定狀態代碼的自定義HTML錯誤頁面,可以將文件添加到/error目錄中。錯誤頁面可以是靜態HTML(即添加到任何靜態資源目錄下),也可以使用模板構建。文件的名稱應該是確切的狀態代碼或序列掩碼。

環境:SpringBoot2.7.16

1. 簡介

默認情況下,Spring Boot提供了一個/error映射,以合理的方式處理所有錯誤,并且它在servlet容器中注冊為“全局”錯誤頁面。對于機器客戶端,它會生成一個JSON響應,其中包含錯誤、HTTP狀態和異常消息的詳細信息。對于瀏覽器客戶端,有一個“白標簽”錯誤視圖,它以HTML格式呈現相同的數據(要自定義它,只需要定義一個以error 為beanName的View bean對象)。

如果需要自定義默認的錯誤處理行為,可以通過設置server.error相應屬性。

要完全替換默認行為,可以實現ErrorController并注冊為Bean,或者添加ErrorAttributes類型的bean。

BasicErrorController可以用作自定義ErrorController的基類。如果想為新的內容類型添加處理程序,這一點尤其有用(默認情況是專門處理text/html,并為其他所有內容提供后備)。要做到這一點,請擴展BasicErrorController,添加一個帶有具有products屬性的@RequestMapping的公共方法,并創建一個新類型的bean。

從Spring Framework 6.0開始,支持RFC 7807 Problem Details。Spring MVC可以使用application/pproblem+json媒體類型生成自定義錯誤消息,如:

{
  "type": "http://www.pack.com/users/666",
  "title": "Unknown project",
  "status": 404,
  "detail": "xxxxx",
  "instance": "/users/666"
}

可以通過將spring.mvc.problemdetails.enabled設置為true來啟用此支持。

還可以定義一個用@ControllerAdvice注釋的類,以自定義JSON格式輸出,如以下示例所示:

@RestControllerAdvice(basePackageClasses = SomeController.class)
public class MyControllerAdvice extends ResponseEntityExceptionHandler {


  @ExceptionHandler(Exception.class)
  public ResponseEntity<?> handleControllerException(HttpServletRequest request, Throwable ex) {
    HttpStatus status = getStatus(request);
    return new ResponseEntity<>(new MyErrorBody(status.value(), ex.getMessage()), status);
  }


  private HttpStatus getStatus(HttpServletRequest request) {
    Integer code = (Integer) request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
    HttpStatus status = HttpStatus.resolve(code);
    return (status != null) ? status : HttpStatus.INTERNAL_SERVER_ERROR;
  }


}

2. 自定義錯誤頁

如果要顯示給定狀態代碼的自定義HTML錯誤頁面,可以將文件添加到/error目錄中。錯誤頁面可以是靜態HTML(即添加到任何靜態資源目錄下),也可以使用模板構建。文件的名稱應該是確切的狀態代碼或序列掩碼。

例如,要將404映射到靜態HTML文件,目錄結構如下:

src/
 +- main/
     +- java/
     |   + <source code>
     +- resources/
         +- public/
             +- error/
             |   +- 404.html
             +- <other public assets>

要使用FreeMarker模板映射所有5xx錯誤,目錄結構如下:

src/
 +- main/
     +- java/
     |   + <source code>
     +- resources/
         +- templates/
             +- error/
             |   +- 5xx.ftlh
             +- <other templates>

對于更復雜的映射,還可以添加實現ErrorViewResolver接口的bean,如以下示例所示:

@Component
public class PackErrorViewResolver implements ErrorViewResolver {


  @Override
  public ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus status, Map<String, Object> model) {
    if (status == HttpStatus.INTERNAL_SERVER_ERROR) {
      return new ModelAndView("error") ;
    }
    return null ;
  }
}

3. 向容器注冊錯誤頁

對于不使用Spring MVC的應用程序,可以使用ErrorPageRegistrar接口直接注冊ErrorPages。這種抽象直接與底層嵌入式Servlet容器一起工作,即使沒有Spring MVC DispatcherServlet也能工作。

@Configuration
public class PackErrorPagesConfiguration {


  @Bean
  public ErrorPageRegistrar errorPageRegistrar() {
    return this::registerErrorPages;
  }


  private void registerErrorPages(ErrorPageRegistry registry) {
    registry.addErrorPages(new ErrorPage(HttpStatus.BAD_REQUEST, "/400"));
  }
}

4. 默認錯誤頁注冊原理

這里以Tomcat為例,SpringBoot內嵌tomcat容器會自動注冊TomcatServletWebServerFactory該類進行Tomcat容器的配置,這其中就包括將錯誤頁注冊到tomcat中。并且該類實現了ErrorPageRegistry接口,該類專門用來注冊錯誤頁。

public class TomcatServletWebServerFactory {
  public WebServer getWebServer(...) {
    Tomcat tomcat = new Tomcat();
    // ...
    prepareContext(...);
  }
  protected void prepareContext(...) {
    // ...
    configureContext(...)
  }
  protected void configureContext(...) {
    // ...
    // 獲取容器中定義的所有ErrorPage錯誤頁
    for (ErrorPage errorPage : getErrorPages()) {
      org.apache.tomcat.util.descriptor.web.ErrorPage tomcatErrorPage = new org.apache.tomcat.util.descriptor.web.ErrorPage();
      tomcatErrorPage.setLocation(errorPage.getPath());
      tomcatErrorPage.setErrorCode(errorPage.getStatusCode());
      tomcatErrorPage.setExceptionType(errorPage.getExceptionName());
      context.addErrorPage(tomcatErrorPage);
    }
  }
}

這些ErrorPage通過如下方式被添加到上面的TomcatServletWebServerFactory中

SpringBoot會注冊一個ErrorPageRegistrarBeanPostProcessor處理器

public class ErrorPageRegistrarBeanPostProcessor implements BeanPostProcessor, BeanFactoryAware {
  public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
    // 上面說了TomcatServletWebServerFactory實現了ErrorPageRegistry接口
    if (bean instanceof ErrorPageRegistry) {
      postProcessBeforeInitialization((ErrorPageRegistry) bean);
    }
    return bean;
  }
  private void postProcessBeforeInitialization(ErrorPageRegistry registry) {
    for (ErrorPageRegistrar registrar : getRegistrars()) {
      registrar.registerErrorPages(registry);
    }
  }
  private Collection<ErrorPageRegistrar> getRegistrars() {
    if (this.registrars == null) {
      // 獲取容器中的所有ErrorPageRegistrar
      this.registrars = new ArrayList<>(
          this.beanFactory.getBeansOfType(ErrorPageRegistrar.class, false, false).values());
      this.registrars.sort(AnnotationAwareOrderComparator.INSTANCE);
      this.registrars = Collections.unmodifiableList(this.registrars);
    }
    return this.registrars;
  }
}

注意:自定義ErrorPageRegistrar時,我們可以通過實現Ordered接口控制優先級

以上是本篇文章的全部內容,希望對你有幫助。

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2011-05-25 10:26:42

ora-02069錯誤

2021-04-14 07:08:14

Nodejs錯誤處理

2021-03-02 09:12:25

Java異常機制

2022-11-16 08:41:43

2014-11-17 10:05:12

Go語言

2010-06-01 16:14:04

2009-08-05 16:04:50

2021-04-29 09:02:44

語言Go 處理

2023-10-28 16:30:19

Golang開發

2016-08-19 10:41:42

Swift 2錯誤

2017-03-08 08:57:04

JavaScript錯誤堆棧

2015-08-19 14:11:56

SQL Server錯誤處理

2017-04-06 14:40:29

JavaScript錯誤處理堆棧追蹤

2023-12-26 22:05:53

并發代碼goroutines

2023-11-08 15:04:55

事務GORM

2009-06-19 16:20:14

ASP.NET錯誤處理

2023-10-08 20:31:18

React

2025-01-16 16:36:00

2016-09-07 20:28:17

MySQL存儲數據庫

2025-03-18 09:20:00

Go語言Golang
點贊
收藏

51CTO技術棧公眾號

韩国无码av片在线观看网站| 欧美综合第一页| 亚洲精品www.| 99视频免费在线观看| 国产激情一区二区三区桃花岛亚洲| 欧美激情中文字幕在线| 中文精品在线观看| 日韩五码电影| 富二代精品短视频| 一本色道久久99精品综合| 欧美三级一区二区| 国产av人人夜夜澡人人爽麻豆| 国产视频精选在线| 国产精品亚洲一区二区三区妖精 | 亚洲国产片色| 在线丨暗呦小u女国产精品| 古装做爰无遮挡三级聊斋艳谭| 午夜欧美激情| 尤物在线观看一区| 日本亚洲欧洲精品| 丰满人妻一区二区三区免费| 琪琪一区二区三区| 91av网站在线播放| 欧美成人精品欧美一| 欧美精选视频在线观看| 精品国产区一区| 999这里有精品| 中文在线а√在线8| 亚洲一区日韩精品中文字幕| 亚洲国产激情一区二区三区| 性插视频在线观看| 丁香婷婷综合五月| 亚洲最大福利网站| 一区二区日韩在线观看| 日韩激情一二三区| 55夜色66夜色国产精品视频| 精品少妇一二三区| 这里只有精品在线| 精品小视频在线| 日本一级大毛片a一 | 国产激情一区二区三区在线观看| 免费黄色片视频| 国产精品最新自拍| 97av视频在线| 日本少妇毛茸茸高潮| 欧美日本国产| 久久国产精品久久久久久| 成人黄色短视频| 超碰成人久久| 一本色道久久88综合日韩精品| 国产呦小j女精品视频| 日韩av网站在线免费观看| 精品毛片乱码1区2区3区| 精产国品一二三区| 精品一区二区三区在线观看视频| 欧美精品久久99| 国产乱码一区二区三区四区| 午夜不卡一区| 日韩一区二区三免费高清| 最新免费av网址| 久久国产精品免费一区二区三区| 91精品啪在线观看国产60岁| 人人爽人人爽av| 日日夜夜亚洲| 日韩欧美电影在线| 麻豆精品国产传媒av| 国产精品丝袜在线播放| 精品一区二区三区三区| 免费看污黄网站在线观看| 久久av电影| 在线观看日韩欧美| 少妇高潮在线观看| 精品二区视频| 欧美亚洲在线视频| 中文字幕av网站| 国内精品在线播放| 国产日韩亚洲精品| 黄网在线免费| 亚洲欧美日韩中文播放| 久久人人爽人人爽人人av| 成人免费图片免费观看| 日本福利一区二区| 激情五月婷婷基地| 国产suv精品一区| 亚洲深夜福利在线| 国产精品丝袜一区二区| 亚洲日韩视频| 国产99视频在线观看| 国产一区二区三区三州| 成人小视频免费在线观看| 久久久久久久久久久久久9999| 国产福利小视频在线观看| 亚洲人xxxx| 欧美成人xxxxx| 久久女人天堂| 亚洲国内精品在线| 最新日韩免费视频| 日韩视频一区| 国产欧美精品va在线观看| 亚洲精品国产手机| 日本一区二区三级电影在线观看 | 18啪啪污污免费网站| 欧美另类专区| 国产精品久久久久久搜索| 精品国产无码AV| 国产亚洲精品bt天堂精选| 成人性做爰片免费视频| 无码小电影在线观看网站免费| 欧美日韩国产片| 免费无码一区二区三区| 国产大片一区| 日韩免费av片在线观看| 狠狠躁夜夜躁av无码中文幕| 国产精品免费aⅴ片在线观看| www.av蜜桃| 四虎地址8848精品| 亚洲精品中文字| 免费麻豆国产一区二区三区四区| 日本伊人午夜精品| 久99久在线| 图片区小说区亚洲| 欧美男人的天堂一二区| 免费人成又黄又爽又色| 一区二区亚洲精品| 91在线短视频| 成人av免费| 欧美日韩视频在线第一区| 少妇大叫太粗太大爽一区二区| 欧美日本中文| 95av在线视频| gogogo高清在线观看免费完整版| 色一区在线观看| 成人在线视频免费播放| 欧美精品麻豆| 91在线无精精品一区二区| 在线观看麻豆| 欧美视频一区二| 制服 丝袜 综合 日韩 欧美| 国产精品毛片一区二区三区| 国产成人亚洲欧美| huan性巨大欧美| 欧美老人xxxx18| 肉色超薄丝袜脚交69xx图片| 日韩高清在线观看| 欧美性xxxx69| 五月激情久久| 一本一本久久a久久精品综合小说| 日本视频在线观看免费| 91免费版在线| 国产熟女高潮视频| 九九在线精品| 国产精品美女呻吟| 香蕉视频在线播放| 欧美精品 日韩| 成人在线观看免费完整| 国产精品99久久久久久有的能看| 青少年xxxxx性开放hg| 外国成人毛片| 欧美激情一区二区三区久久久| 成人激情四射网| 亚洲在线视频免费观看| 国产一级免费片| 亚洲专区免费| 日韩欧美在线电影| 福利一区二区三区视频在线观看| www.日韩免费| www.久久综合| 欧美日韩加勒比精品一区| 三级网站在线免费观看| 奇米777欧美一区二区| 国产精品jizz在线观看老狼| 国产激情精品一区二区三区| 欧美日韩成人免费| 青春草在线观看| 欧美三级欧美一级| 久久视频免费看| 91浏览器在线视频| 在线观看国产中文字幕| 影音先锋日韩在线| 久久riav二区三区| 成人精品一区二区三区电影| 久久九九亚洲综合| 四虎成人免费在线| 欧美日韩久久久一区| 青青草手机视频在线观看| 99精品欧美一区二区蜜桃免费| 国产中文字幕免费观看| 久久亚洲成人| 国产精品日韩一区二区| 影视一区二区三区| 欧美黄色成人网| 国产午夜精品一区理论片| 欧美一区二区精美| 免费污污视频在线观看| 亚洲男人的天堂网| 受虐m奴xxx在线观看| 韩国成人福利片在线播放| 激情伊人五月天| 999久久久91| 久久大片网站| 日本在线一区二区三区| 欧美最顶级丰满的aⅴ艳星| 黄色在线视频网站| 亚洲女同性videos| 国产精品无码天天爽视频| 欧美午夜片在线免费观看| 亚洲综合网在线| 国产日韩高清在线| 蜜臀视频在线观看| 国产在线视频一区二区| 黄在线观看网站| 精品成人久久| 欧美一级黄色录像片| 欧美日韩久久精品| 久久精品午夜一区二区福利| 国产精品1区在线| 国产精品成人va在线观看| 国产亚av手机在线观看| 久久久国产视频| 成人激情电影在线看| 日韩国产激情在线| 日韩中文字幕观看| 欧美一二三区在线| 国产又粗又黄又爽视频| 91福利视频在线| 中文字幕国产在线观看| 五月激情综合婷婷| 国产一级一片免费播放放a| 亚洲美女视频在线| 波兰性xxxxx极品hd| 欧美激情综合在线| 亚洲精品国产精品国自产网站| 93久久精品日日躁夜夜躁欧美| 国产原创剧情av| 成人午夜碰碰视频| 日本xxxx免费| 国产馆精品极品| 特黄视频免费观看| 国产在线播放一区三区四| 亚洲小视频网站| 麻豆国产精品视频| 天堂一区在线观看| 久久精品国产**网站演员| 国产高清视频网站| 麻豆精品一二三| 成人不卡免费视频| 激情伊人五月天久久综合| 男生操女生视频在线观看| 麻豆精品在线观看| 中文字幕亚洲影院| 国产麻豆精品在线观看| 乳色吐息在线观看| 大尺度一区二区| 国产精品久久AV无码| 91网站最新网址| 成人性生交大免费看| 国产日韩三级在线| 国产91在线播放九色| 日韩美女精品在线| 免费日韩在线视频| 精品久久久久久中文字幕一区奶水| 久热这里只有精品6| 一本久道中文字幕精品亚洲嫩| 不卡av电影在线| 欧美视频一区二区三区在线观看| 97人妻精品一区二区三区| 欧美一区二区免费视频| 人妻91麻豆一区二区三区| 精品亚洲国产视频| 69视频在线观看| 欧美黑人视频一区| 中文字幕影音在线| 国产日韩欧美91| 国产精品亚洲欧美一级在线| 国产精品一区二区三区免费| 九色成人国产蝌蚪91| 亚洲制服中文| 国内精品久久久久久久影视麻豆| 成人免费aaa| 九九在线精品视频| 亚洲欧美日韩色| 久久精品亚洲乱码伦伦中文 | 色av男人的天堂免费在线| 国产一区二区三区精品久久久 | 91极品视频在线| 国产成人精品亚洲日本在线观看| 国产色婷婷国产综合在线理论片a| 日韩精品一区二区三区中文在线| 精品一区日韩成人| 99国产**精品****| 欧美日韩精品在线一区二区| 欧美a级理论片| 男人的天堂影院| 亚洲欧洲日韩女同| 久久久久亚洲av成人毛片韩| 欧美二区三区的天堂| 四虎精品在永久在线观看| 久久五月天色综合| 欧美男女交配| 成人毛片网站| 日韩激情在线| 欧美日韩一道本| 国产传媒欧美日韩成人| 国产又粗又猛又爽又黄av| 一区二区高清在线| 中文字幕乱伦视频| 亚洲国产私拍精品国模在线观看| 日本亚洲精品| 国产www精品| 97超碰成人| 一区二区三区久久网| 销魂美女一区二区三区视频在线| 亚洲综合在线一区二区| 中文字幕二三区不卡| 四虎精品永久在线| 亚洲福利精品在线| а√中文在线8| 91精品国产自产在线| 禁断一区二区三区在线| a级黄色一级片| 丁香婷婷综合激情五月色| 四虎精品免费视频| 日本高清不卡一区| 青青草视频免费在线观看| 性欧美亚洲xxxx乳在线观看| 日韩视频1区| 99精品一级欧美片免费播放| 日韩二区三区在线观看| 国产精品无码午夜福利| 亚洲成人黄色影院| 午夜精品久久久久久久99热黄桃 | 五月天亚洲综合| 米奇777在线欧美播放| 加勒比精品视频| 激情懂色av一区av二区av| 欧美 中文字幕| 久久久影视精品| www.爱久久| 每日在线观看av| 成年人国产精品| 久久久综合久久久| 亚洲第一精品福利| 91九色美女在线视频| 国产日产精品一区二区三区四区 | 国产精品美女久久久久久| 日本黄色中文字幕| 亚洲午夜激情免费视频| 色豆豆成人网| 亚洲欧美综合一区| 超碰个人在线| 成人午夜国产| 四虎4hu永久免费入口| 国产在线精品不卡| 国产精品 欧美激情| 欧美一卡2卡三卡4卡5免费| 蜜芽在线免费观看| 91社区国产高清| 欧美福利影院| av不卡中文字幕| 亚洲成av人在线观看| 偷拍自拍在线| 国产精品成人va在线观看| 日韩精品首页| 欧美大片久久久| 一区二区三区精品| 视频二区在线观看| 欧美一区二区视频97| 精品国产一区一区二区三亚瑟| 国产色视频在线播放| 亚洲品质自拍视频网站| 亚洲乱码在线观看| 97在线看福利| 欧美日韩性在线观看| 欧美视频亚洲图片| 亚洲高清免费一级二级三级| 视频午夜在线| 国产精品免费一区豆花| 欧美日韩午夜| 中文幕无线码中文字蜜桃| 欧美日韩国产一级片| 成人性生交大片免费看网站| 蜜桃av噜噜一区二区三| 久久精品国产999大香线蕉| 久热这里只有精品在线| 亚洲欧美另类国产| 国产午夜精品一区在线观看| 狠狠97人人婷婷五月| 中文一区一区三区高中清不卡| 精品久久国产视频| 日本国产精品视频| 亚洲精品久久久| 双性尿奴穿贞c带憋尿| 欧美老肥妇做.爰bbww| а√在线天堂官网| 曰韩不卡视频| 91看片淫黄大片一级在线观看| 国产精品久久久久久久久毛片 | 国产中文字幕一区| 五月婷婷色丁香| 久久国产色av|