Spring MVC异常处理

时间:2021-02-20 08:27:54

Spring Mvc 中异常处理,一般有两种解决办法:

一、利用org.springframework.web.servlet.handler.SimpleMappingExceptionResolver 这个类,配置在spring-servlet.xml文件中:

<!-- 异常处理 -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
  <property name="defaultErrorView" value="/error/exception" />
  <!-- 定义异常处理页面用来获取异常信息的变量名,默认名为exception --> 
  <property name="exceptionAttribute" value="ex"></property> 
  <property name="exceptionMappings">
    <props>
      <prop key="java.io.IOException">error/ioexception</prop>
    </props>
  </property>
</bean>

二、通过注解 ExceptionHandler处理,代码如下:

@ExceptionHandler(value={IOException.class, Exception.class})
public ModelAndView exception(Exception ex, HttpServletRequest request) {
  request.setAttribute("ex", ex);
  if(ex instanceof IOException)
    return new ModelAndView("error/ioexception");
  if(ex instanceof SQLException)
    return new ModelAndView("error/sqlexception");
  if(ex instanceof Exception)
    return new ModelAndView("error/exception");

  return new ModelAndView("error/exception");
}

在jsp页面上可以通过 <% Exception ex = (Exception)request.getAttribute("ex"); %>  得到异常对象。

一般情况下是把这个方法放到一个基类里,比如 BaseController,这样需要统一处理异常的Controller只需要继承这个BaseController就可以了。