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就可以了。