【SpringMVC】异常处理ExceptionHandlerExceptionResolver
2017-07-31 22:43
561 查看
springmvc中出现异常不去处理,直接抛给springmvc框架。
主要处理Handler中用@ExceptionHandler注解定义的方法
@ExceptionHandler注解定义的方法优先级问题:
·发生空指针异常,但声明异常有runtimeexception和excetion,此时会根据异常最近继承关系找到继承深度最浅的那个
@ExceptionHandle注解方法标记了runtimeexception的方法
如果ExceptionHandlerExceptionResolver内部找不到@ExceptionHandler注解的话,会找@ControllerAdvice中@ExceptionHandler注解方法
主要处理Handler中用@ExceptionHandler注解定义的方法
@ExceptionHandler注解定义的方法优先级问题:
·发生空指针异常,但声明异常有runtimeexception和excetion,此时会根据异常最近继承关系找到继承深度最浅的那个
@ExceptionHandle注解方法标记了runtimeexception的方法
如果ExceptionHandlerExceptionResolver内部找不到@ExceptionHandler注解的话,会找@ControllerAdvice中@ExceptionHandler注解方法
jsp: <a href="testExceptionHandlerExceptionResolver?i=10">test ExceptionHandlerExceptionResolver</a> 控制器 @RequestMapping("/testExceptionHandlerExceptionResolver") public String testExceptionHandlerExceptionResolver(@RequestParam("i") int i){ System.out.println("result:"+(10/i)); return "success"; } 当我们给i传参,程序出现异常,该如何处理? 在controller中增加如下方法,在注解value中可以指定处理的异常类 @ExceptionHandler({ArithmeticException.class}) public String handleArithmeticException(Exception ex){ System.out.println("出异常了:"+ex); return"error"; } 结果:控制台打印出异常信息 综上:可以用一个方法和一个注解来解决异常处理问题,避免了struts2中通过excetion Mapping映射来处理异常 |
注意几个细节: 1. 如何将异常信息返回到页面上呢? 尝试将异常信息装入map,再次请求 发现,异常处理方法不好使了 2. 在@ExceptionHandler注解的方法入参中可以加入Exception类型的参数,该参数即对应发生的异常对象 3. @ExceptionHandler方法的入参中不能传入map,若希望把异常信息传到页面上,需要使用ModelAndView作为返回值 改造处理: error.jsp中加入spel表达式: ${exception} 控制器: @ExceptionHandler({ArithmeticException.class}) public ModelAndView handleArithmeticException(Exception ex){ System.out.println("出异常了:"+ex); ModelAndView mv=new ModelAndView("error"); mv.addObject("exception",ex); return mv; } 4. @ExceptionHandler标记的方法优先级问题 在controller中写了两个处理异常的方法,当发生异常时,优先被和异常最近的方法处理 @ExceptionHandler({RuntimeException.class}) public ModelAndView handleArithmeticException2(Exception ex){ System.out.println("[出异常了]:"+ex); ModelAndView mv=new ModelAndView("error"); mv.addObject("exception",ex); return mv; } @ExceptionHandler({ArithmeticException.class}) public ModelAndView handleArithmeticException(Exception ex){ System.out.println("出异常了:"+ex); ModelAndView mv=new ModelAndView("error"); mv.addObject("exception",ex); return mv; } 5. 以上处理的都是一个局部handler的异常,如何配置全局的呢? 将控制器中的异常处理方法全部注释掉,这样就在当前的Handler中找不到@ExceptionHandler标记的可处理异常的方法,那么就去@ControllerAdvice 标记的类中找@ExceptionHandler标记的方法来处理异常 例如:新建一个类,在类中写上异常处理方法 用@ControllerAdvice标记类,注册到spring容器中 @ControllerAdvice public class HandlerException { @ExceptionHandler({ArithmeticException.class}) public ModelAndView handleArithmeticException(Exception ex){ System.out.println("----> 出异常了:"+ex); ModelAndView mv=new ModelAndView("error"); mv.addObject("exception",ex); return mv; } } 结果:加入控制器增强处理后,可以处理controller中抛出的异常了 |
相关文章推荐
- SpringMVC 异常处理 - HandlerExceptionResolver
- SpringMVC 异常统一处理接口 HandlerExceptionResolver
- SpringMVC 异常处理HandlerExceptionResolver 笔记(八)
- 利用HandlerExceptionResolver对SpringMVC进行统一异常处理
- SpringMVC 异常处理 - HandlerExceptionResolver
- SpringMVC 异常处理 - HandlerExceptionResolver
- SpringMVC 异常处理 - HandlerExceptionResolver
- 应用Spring mvc HandlerExceptionResolver 处理异常全局跳转方法
- SpringMVC框架中的异常解析器-ExceptionHandler和HandlerExceptionResolver(转)
- Java深入 - Spring 异常处理HandlerExceptionResolver
- Spring MVC的Controller统一异常处理:HandlerExceptionResolver
- Spring 异常处理HandlerExceptionResolver
- Spring MVC的Controller统一异常处理:HandlerExceptionResolver
- Spring MVC的Controller统一异常处理:HandlerExceptionResolver
- Spring 异常处理HandlerExceptionResolver
- springMvc 自定义错误处理--HandlerExceptionResolver
- HandlerExceptionResolver统一捕获系统异常做处理
- Spring MVC的Controller统一异常处理:HandlerExceptionResolver
- Spring MVC的Controller统一异常处理:HandlerExceptionResolver
- spring异常处理-HandlerExceptionResolver