spring mvc 异常统一处理方式

来源:互联网 发布:sql server卸载干净 编辑:程序博客网 时间:2024/05/17 09:27

1、实现自己的HandlerExceptionResolver,HandlerExceptionResolver是一个接口,springMVC本身已经对其有了一个自身的实现——DefaultExceptionResolver,该解析器只是对其中的一些比较典型的异常进行了拦截处理。

 

public class ExceptionHandler implements HandlerExceptionResolver {       @Override      public ModelAndView resolveException(HttpServletRequest request,               HttpServletResponse response, Object handler, Exception ex) {           // TODO Auto-generated method stub           return new ModelAndView("exception");       }   }  

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

<bean id="exceptionResolver" class="com.tiantian.xxx.web.handler.ExceptionHandler"/>  

这样就可以了。


2、如果我们不想定制。可是使用 SimpleMappingExceptionResolver这个继承类。

    <!-- 全局异常配置 start -->    <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">        <property name="exceptionMappings">            <props>                <prop key="org.apache.shiro.authz.UnauthorizedException">welcome/error/unauthorized</prop>                <prop key="org.apache.shiro.authz.UnauthenticatedException">welcome/signIn/login</prop>            </props>        </property>        <property name="statusCodes">            <props>                <prop key="errors/error">500</prop>                <prop key="errors/404">404</prop>            </props>        </property>        <!-- 设置日志输出级别,不定义则默认不输出警告等错误日志信息 -->        <property name="warnLogCategory" value="WARN"></property>        <!-- 默认错误页面,当找不到上面mappings中指定的异常对应视图时,使用本默认配置 -->        <property name="defaultErrorView" value="errors/error"></property>        <!-- 默认HTTP状态码 -->        <property name="defaultStatusCode" value="500"></property>    </bean>    <!-- 全局异常配置 end -->

3、使用@ExceptionHandler进行处理

使用@ExceptionHandler进行处理有一个不好的地方是进行异常处理的方法必须与出错的方法在同一个Controller里面,不过可以写一个基础的controller 没个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("出错了!");       }                 }  




原创粉丝点击