springboot異常處理機制
阿新 • • 發佈:2019-01-08
一、SpringBoot 404、500錯誤提示頁面
錯誤提示頁面的命名規則就是:錯誤碼.html,如404是404.html,500是500.html 放在,也可以使用4xx.html,5xx.html,優先精確匹配也就是說如果404錯誤,會匹配的404.html
如果使用freemarker則對應的是404.ftl,500.ftl
二、異常處理
@ExceptionHandler異常處理
SpringMVC提供了@ExceptionHandler 這個註解,在 SpringBoot 裡面,我們同樣可以使用它來做異常捕獲。直接在對應的 Controller 裡面增加一個異常處理的方法,並使用 @ExceptionHandler 標識它即可。
@ExceptionHandler(BuinessException.class)
public String handleException(BuinessException e,Model model){
model.addAttribute("code",e.getCode() );
model.addAttribute("msg",e.getMessage());
return "error/exception";
}
@ExceptionHandler 攔截了異常,我們可以通過該註解實現自定義異常處理。其中,@ExceptionHandler 配置的 value 指定需要攔截的異常型別
這樣只能做到單一的controller異常處理,專案中一般都存在著多個 Controller,它們其中大多數異常處理都大同小異,這樣就合適在每一個 Controller 裡面都編寫一個對應的異常處理方法。可以將異常處理方法向上挪移到父類中,然後所有的 Controller 統一繼承父類即可
@ControllerAdvice異常處理
實際開發中,需要對異常分門別類的進行處理,ControllerAdvice攔截異常並統一處理,
package com.sun.houses.controller.adapter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import com.sun.houses.exception.BuinessException; @ControllerAdvice public class MyExceptionHandler { private static Logger LOGGER = LoggerFactory.getLogger(MyExceptionHandler.class); @ExceptionHandler(BuinessException.class) public String handleException(BuinessException e,Model model){ LOGGER.error("buiness exception code:{},message:{}",e.getCode(),e.getMessage()); model.addAttribute("code",e.getCode() ); model.addAttribute("msg",e.getMessage()); return "error/exception"; } }
@ExceptionHandler 指定要攔截的異常,我這裡是自定義異常BuinessException