1. 程式人生 > >Spring Boot 學習筆記(十三)——全域性異常處理

Spring Boot 學習筆記(十三)——全域性異常處理

預設異常處理機制

1、Whitelabel Error Page 當客戶端訪問頁面不存在,或服務端處理髮生異常,一般瀏覽器客戶端傳送的請求頭中為:Accept:text/html;所以就返回一個html文件。 這裡有一個很重要的類:BasicErrorController,對於比較複雜的自定義要求,可以繼承該類,定義相應的ModelAndView。 2、用Postman等除錯工具傳送一個不存在的URL;或返回一個json字串:

{
    "timestamp": "2018-05-12T06:11:45.209+0000",
    "status": 404,
    "error": "Not Found",
    "message": "No message available",
    "path": "/index.html"
}

自定義錯誤頁面

優先順序: 1、error.html會覆蓋預設的 whitelabel Error Page 錯誤提示 2、靜態錯誤頁面優先級別比error.html高 3、動態模板錯誤頁面優先順序比靜態錯誤頁面高

注意:對與高階複雜的錯誤覆蓋: 1、現在配置類中配置: EmbeddedServletContainerCustomizer類,重寫customize方法,

@Configuration
public class ContainerConfig {
    @Bean
    public EmbeddedServletContainerCustomizer containerCustomizer(){
        return new EmbeddedServletContainerCustomizer(){
            @Override
            public void customize(ConfigurableEmbeddedServletContainer container) {
                container.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error/500"));
                container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/error/404"));
            }
        };
    }
}

將產生的異常錯誤請求進行轉發,轉發到的新對映,可以看成訪問路徑,在Controller類的方法中作為輸入的值,也就是@RequestMapping的value。

@ControllerAdvice處理異常

上文中的BasicErrorController繼承了AbstractErrorController,後者又實現了ErrorController介面,所以源頭是ErrorController,這是一種全域性性的容錯機制。

此外,還有以下兩個註解可以對指定異常進行特殊處理:主要是高亮的註解,這個註解用在方法上。

1、區域性異常處理:@Controller+@ExceptionHandler

2、全域性異常處理:@ControllerAdvice+@ExceptionHandler

在spring 3.2中,新增了@ControllerAdvice 註解,可以用於定義@ExceptionHandler、@InitBinder@ModelAttribute,並應用到所有@RequestMapping中。 ?標亮的是啥???

搞明白了:所以ModelAndView檢視物件的setViewName方法的名字,就是資源的存放路徑。