Spring MVC处理异常有3种方式:
然后 在Spring的配置文件applicationContext.xml中增加以下内容
(1)使用Spring-MVC提供的SimpleMappingExceptionResolver;
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!-- 定义默认的异常处理页面,当该异常类型的注册时使用 -->
<property name="defaultErrorView" value="error"></property>
<!-- 定义异常处理页面用来获取异常信息的变量名,默认名为exception -->
<property name="exceptionAttribute" value="ex"></property>
<!-- 定义需要特殊处理的异常,用类名或完全路径名作为key,异常以页名作为值 -->
<property name="exceptionMappings">
<props>
<!-- 创建自己所要自定义的异常类 -->
<prop key="com.core.exception.BusinessException">business_error</prop>
<prop key="com.core.exception.ParameterException">parameter_error</prop>
<!-- 还可以继续扩展对不同异常类型的处理 -->
</props>
</property>
</bean>
(2)实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器;
public class MyExceptionHandler implements HandlerExceptionResolver {
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex) {
Map<String, Object> model = new HashMap<String, Object>();
model.put("ex", ex);
// 根据不同错误转向不同页面
if(ex instanceof BusinessException) {
return new ModelAndView("business_error", model);
}else if(ex instanceof ParameterException) {
return new ModelAndView("parameter_error", model);
} else {
return new ModelAndView("error", model);
}
}
}
然后 在Spring的配置文件applicationContext.xml中增加以下内容
<bean id="exceptionHandler" class="com.core.exception.MyExceptionHandler"/>
(3)使用@ExceptionHandler注解实现异常处理;
public class BaseController {
/** 基于@ExceptionHandler异常处理 */
@ExceptionHandler
public String exp(HttpServletRequest request, Exception ex) {
request.setAttribute("ex", ex);
// 根据不同错误转向不同页面
if(ex instanceof BusinessException) {
return "business_error";
}else if(ex instanceof ParameterException) {
return "parameter_error";
} else {
return "error";
}
}
}