1.自定義錯誤頁面
SpringBoot 默認的處理異常機制:SpringBoot默認的已經提供了一套處理異常的機制。一旦程序中出現了異常,SpringBoot會向/error的url發送請求。在SpringBoot中提供了一個叫BasicExceptionController來處理/error請求,然后跳轉到默認顯示異常的頁面來展示異常信息。
如果需要將所有的異常同一跳轉到自定義的錯誤頁面,需要再src /main/resources/templates目錄下創建error.html頁面。注意:名稱必須叫error.
2.@ExceptionHandle注解處理異常
@Controller
public class DemoController {
@RequestMapping("/show")
public String showInfo() {
String string = null;
string.length();
return "index";
}
@RequestMapping("/show2")
public String showInfo2() {
int a = 10 / 0;
return "index";
}
/**
* java.lang.ArithmeticException 該方法需要返回一個ModelAndView :目的是可以讓我們封裝異常信息以及視圖指定
* Exception e : 會將產生異常對象注入到方法中
*
* @param e
* @return
*/
@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;
}
/**
* java.lang.ArithmeticException 該方法需要返回一個ModelAndView :目的是可以讓我們封裝異常信息以及視圖指定
* Exception e : 會將產生異常對象注入到方法中
* @param e
* @return
*/
@ExceptionHandler(value = { java.lang.NullPointerException.class })
public ModelAndView nullPointerExceptionHandler(Exception e) {
ModelAndView mv = new ModelAndView();
mv.addObject("error", e.toString());
mv.setViewName("error2");
return mv;
}
}
3.@ControllerAdvice+@ExceptionHandler注解處理異常
@ControllerAdvice
public class GlobalException {
@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;
}
@ExceptionHandler(value = { java.lang.NullPointerException.class })
public ModelAndView nullPointerExceptionHandler(Exception e) {
ModelAndView mv = new ModelAndView();
mv.addObject("error", e.toString());
mv.setViewName("error2");
return mv;
}
}
4.配置SimpleMappingExceptionResolver處理異常
/**
* 通過SimpleMappingExceptionResolver做全局異常處理
*
* @author Lenovo
*
*/
@Configuration
public class GlobalException {
/**
* 該方法必須有返回值類型,返回值類型為:SimpleMappingExceptionResolver
*/
@Bean
public SimpleMappingExceptionResolver geSimpleMappingExceptionResolver() {
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;
}
}
5.自定義HandlerExceptionResolver類處理異常
/**
* 通過實現HandlerExceptionResolver做全局異常處理
*
* @author Lenovo
*
*/
@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;
}
}