springmvc 异常处理器

来源:互联网 发布:月球发现二战飞机知乎 编辑:程序博客网 时间:2024/06/17 15:36

本文是参照使用springMVC进行统一的异常处理
- 简介
- 实现接口接口:HandlerExceptionResolver
- 3、使用@ExceptionHandler进行处理

1、简介

springMVC提供的异常处理主要有两种方式,一种是直接实现自己的HandlerExceptionResolver,另一种是使用注解的方式实现一个专门用于处理异常的ExceptionHandler。

2、实现接口接口:HandlerExceptionResolver

实现自己的HandlerExceptionResolver,HandlerExceptionResolver是一个接口,springMVC本身已经对其有了一个自身的实现

public class ExceptionResolver implements HandlerExceptionResolver {    /**     * 处理异常     */    @Override    public ModelAndView resolveException(HttpServletRequest req,HttpServletResponse resp, Object obj, Exception exception) {        return new ModelAndView(ConstantUtil.ERRORURL);        //return null;    }}

上述的resolveException的第4个参数表示对哪种类型的异常进行处理,如果想同时对多种异常进行处理,可以把它换成一个异常数组。
定义了这样一个异常处理器之后就要在spring-beans.xml中定义这样一个bean对象,如:

<bean id="exceptionResolver" class="cn.tm.common.event.listener.ExceptionResolver"/>

3、使用@ExceptionHandler进行处理

使用@ExceptionHandler进行处理有一个不好的地方是进行异常处理的方法必须与出错的方法在同一个Controller里面
如:

import org.springframework.stereotype.Controller;  import org.springframework.web.bind.annotation.ExceptionHandler;  import org.springframework.web.bind.annotation.RequestMapping;  import com.tiantian.blog.web.servlet.MyException;  @Controller  public class GlobalController {      /**      * 用于处理异常的      * @return      */      @ExceptionHandler({MyException.class})      public String exception(MyException e) {          System.out.println(e.getMessage());          e.printStackTrace();          return "exception";      }      @RequestMapping("test")      public void test() {          throw new MyException("出错了!");      }  }  

这里在页面上访问test方法的时候就会报错,而拥有该test方法的Controller又拥有一个处理该异常的方法,这个时候处理异常的方法就会被调用。

当发生异常的时候,上述两种方式都使用了的时候,第一种方式会将第二种方式覆盖。

0 0