SpringBoot提供了多種處理異常方式,如下爲經常使用的幾種html
SpringBoot默認的處理異常的機制:SpringBoot默認的已經提供了一套處理異常的機制。一旦程序中出現了異常SpringBoot會像/error的url發送請求。在springBoot中提供了一個叫BasicExceptionController來處理/error請求,而後跳轉到默認顯示異常的頁面來展現異常信息。java
若是咱們須要將全部的異常同一跳轉到自定義的錯誤頁面,須要再src/main/resources/templates目錄下建立error.html頁面。注意:名稱必須叫errorspring
註解使用方式app
/** * java.lang.ArithmeticException * 該方法須要返回一個ModelAndView:目的是能夠讓咱們封裝異常信息以及視圖的指定 * 參數Exception e:會將產生異常對象注入到方法中 */ @ExceptionHandler(value={java.lang.ArithmeticException.class}) public ModelAndView arithmeticExceptionHandler(Exception e){ ModelAndView mv = new ModelAndView(); mv.addObject("error", e.toString()); mv.setViewName("error1"); return mv; }
頁面代碼ide
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>錯誤提示頁面-ArithmeticException</title> </head> <body> 出錯了,請與管理員聯繫。。。 <span th:text="${error}"></span> </body> </html>
須要建立一個可以處理異常的全局異常類。在該類上須要添加@ControllerAdvice註解url
/** * 全局異常處理類 * * */ @ControllerAdvice public class GlobalException { /** * java.lang.ArithmeticException * 該方法須要返回一個ModelAndView:目的是能夠讓咱們封裝異常信息以及視圖的指定 * 參數Exception e:會將產生異常對象注入到方法中 */ @ExceptionHandler(value={java.lang.ArithmeticException.class}) public ModelAndView arithmeticExceptionHandler(Exception e){ ModelAndView mv = new ModelAndView(); mv.addObject("error", e.toString()); mv.setViewName("error1"); return mv; } }
在全局異常類中添加一個方法完成異常的同一處理spa
/** * 經過SimpleMappingExceptionResolver作全局異常處理 * * */ @Configuration public class GlobalException { /** * 該方法必需要有返回值。返回值類型必須是:SimpleMappingExceptionResolver */ @Bean public SimpleMappingExceptionResolver getSimpleMappingExceptionResolver(){ SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver(); Properties mappings = new Properties(); /** * 參數一:異常的類型,注意必須是異常類型的全名 * 參數二:視圖名稱 */ mappings.put("java.lang.ArithmeticException", "error1"); mappings.put("java.lang.NullPointerException","error2"); //設置異常與視圖映射信息的 resolver.setExceptionMappings(mappings); return resolver; } }
須要再全局異常處理類中實現HandlerExceptionResolver接口code
/** * 經過實現HandlerExceptionResolver接口作全局異常處理 * * */ @Configuration public class GlobalException implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { ModelAndView mv = new ModelAndView(); //判斷不一樣異常類型,作不一樣視圖跳轉 if(ex instanceof ArithmeticException){ mv.setViewName("error1"); } if(ex instanceof NullPointerException){ mv.setViewName("error2"); } mv.addObject("error", ex.toString()); return mv; } }