springMVC异常处理总结

 

 a.ExceptionHandlerExceptionResolver

1、@ExceptionHandler --- 统一处理一个controller中(@ExceptionHandler所在controller)的异常,局部捕获处理异常

1 @ExceptionHandler({ArithmeticException.class, NullPointerException.class})
2  public String exception(Exception e) {
3     System.out.println(e);
4       ModelAndView mv = new ModelAndView("error");
5       mv.addObject("error", e);
6       return mv;
7 return "error"; 8 }

该注解作用对象为方法,并且在运行时有效;

该注解标识的方法不能有其他参数,所以前端想要获取异常信息,需要利用ModelAndView;

异常处理路径:最短路径优先。--- 如果有多个处理方法,根据异常的最近继承关系找到继承深度最浅的那个@ExceptionHandler注解方法

2、@ControllerAdvice --- 全局捕获处理异常 -- 注意spring版本,低版本可能不兼容,我一开始用的3.2.0不行,然后改成3.2.3不行,最后选择了4.3.18(我可是因为这个问题浪费了一个上午)

 1 @ControllerAdvice
 2 public class exceptionHandler {
 3 
 4     @ExceptionHandler(ArrayIndexOutOfBoundsException.class)
 5     public ModelAndView arrayIndexOutOfBoundsException(ArrayIndexOutOfBoundsException e) {
 6         System.out.println(e);
 7         ModelAndView mv = new ModelAndView("error");
 8         mv.addObject("error", e);
 9         return mv;
10     }
11 }

不要忘记spring配置文件配置<mvc:annotation-driven></mvc:annotation-driven>

 b.ResponseStatusExceptionResolver ----自定义异常显示页面,类似404

@ResponseStatus(value=HttpStatus.xxx,reason="自己定义")

 

SimpleMappingExceptionResolver --- 通过配置文件捕获异常(看教程的代码,我没有实现)

 1 <!-- 通过SimpleMappingExceptionResolver 捕获异常 -->
 2     <bean class="org.springframework.web.portlet.handler.SimpleMappingExceptionResolver">
 3     <property name="exceptionMappings">
 4         <props>
 5             <prop key="java.lang.ArrayIndexOutOfBoundsException">
 6             <!-- 跳转到error.jsp页面 -->
 7                 error
 8             </prop>
 9         </props>
10     </property>
11     </bean>

 

posted @ 2019-07-31 16:10  Johnny-miao  阅读(244)  评论(0编辑  收藏  举报