SpringMVC的异常处理机制
前言
常见的异常处理方式有两种,一种是申明式异常,另外一种是通过try/catch方式直接对异常进行捕获,手动的对异常进行处理会较为繁琐,而且当服务器遇到未知的异常的时候,web端直接暴露错误码给用户也不太友好。针对这种情况,springmvc提出了统一的异常处理机制,开发人员不再需要手动的try/catch,而是通过异常处理机制来统一处理错误。下面就让我们一起看一下是怎么实现的吧。
一、使用springmvc定义好的SimpleMappingExceptionResolver
在没有配置异常处理器的时候,遇到没有捕获的未知异常,往往会出现这种情况
在spring-mvc.xml文件中,配置使用mvc的简单映射异常处理器
<!-- 使用springmcv自带的简单映射异常处理器· -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView" value="error2"/>
<property name="exceptionMappings">
<map>
<entry key="java.lang.NumberFormatException" value="error1"/>
<entry key="com.xiaoming.exception.MyException" value="error3"/>
</map>
</property>
</bean>
在map中定义了异常类对应映射的错误信息页面,如果异常不在定义的map映射中,则跳转到defaultErrorView定义的页面。
二、使用自定义异常处理器
异常处理步骤
- 创建异常处理类,实现HandlerExceptionResolver接口
package com.xiaoming.util;
import com.xiaoming.exception.MyException;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyExceptionResolver implements HandlerExceptionResolver {
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView mav = new ModelAndView();
if(e instanceof NumberFormatException){
mav.addObject("info","NumberFormatException");
}else if(e instanceof MyException){
mav.addObject("info","MyException");
}else{
mav.addObject("info","OtherException");
}
mav.setViewName("error");
return mav;
}
}
- 在spring-mvc.xml文件中注入这个自定义异常处理器
<bean id="exceptionResolver" class="com.xiaoming.util.MyExceptionResolver"></bean>
配置完后即可使用