异常流程 :controller-ControllerAdvice-异常解析器-默认的error页面html
1.错误页面error.html:spring
程序出现异常会自动跳到error.html里,视频效果,该页面可使用th:text="${exception}"显示异常信息,但本身测试时,页面成功显示,但异常信息不显示。json
2.@ExceptionHandler注解处理异常(有两个处理同一个异常的方法,则启动报错;同时存在@ControllerAdvice则优先于@ControllerAdvice处理异常。)app
spring boot 默认状况下会映射到 /error 进行异常处理,可是提示并不十分友好,下面自定义异常处理,提供友好展现。测试
3.@ControllerAdvice+.@ExceptionHandler处理异常(同时有两个类,两个类都会加载,对于两个类都有同一个异常方法,最终只会执行其中一个类的方法)spa
在Controller中抛出的异常,当没有被catch处理时,GlobalExceptionHandler中定义的处理方法能够起做用,在方法写明注解@ExceptionHandler,并注明其异常类便可。此种方法不只能够做用于Controller,一样的在DAO层、service层也可,均可以由GlobalExceptionHandler进行处理。此种写法减小代码的入侵,值得推荐。指针
@RequestMapping("/home") public String home(ModelMap modelMap) { System.out.println(modelMap.get("author")); } //或者 经过@ModelAttribute获取 @RequestMapping("/home") public String home(@ModelAttribute("author") String author) { System.out.println(author); }
4.配置SimpleMappingExceptionResolver类完成异常处理rest
5.自定义HandlerExceptionResolver类处理异常(若是同时定义两个类,只会加载其中一个类)code
public class GlobalException2 implements HandlerExceptionResolver { public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { ModelAndView modelAndView = new ModelAndView("error"); if (ex instanceof NullPointerException) { modelAndView.addObject("errors","自定义2解析器空指针N"+ex.toString()); }