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方法的名字,就是資源的存放路徑。