您的位置:首页 > 编程语言 > Java开发

springmvc全局异常处理

2016-09-01 11:13 369 查看
对于springmvc全局异常处理有三种方式,

1.使用SimpleMappingExceptionResolver实现异常处理

2.实现HandlerExceptionResolver 接口自定义异常处理器

3.使用@ExceptionHandler注解实现异常处理

第一种方式优缺点:

集成简单、有良好的扩展性、对已有代码没有入侵性等优点,但该方法仅能获取到异常信息,若在出现异常时,对需要获取除异常以外的数据的情况不适用。

第二种方式优缺点:

具有集成简单、有良好的扩展性、对已有代码没有入侵性等优点,同时,在异常处理时能获取导致出现异常的对象,有利于提供更详细的异常处理信息。

第三种方式优缺点:

具有集成简单、不需要附加Spring配置等优点,但该方法对已有代码存在入侵性加上注解,在异常处理时不能获取除异常以外的数据。

我比较喜欢第二种方式,对代码没有侵入性,而且能灵活操作各种异常信息.实现方式见下面的代码.

上面三种方式具体可看:http://cgs1999.iteye.com/blog/1547197

首先在spring配置文件中添加该异常处理的bean:

<bean id="exceptionHandler" class="com.xxx.xxx.exception.MyExceptionHandler"/>


该bean的实现:

package com.xxx.xxx.exception;

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

/**
* spirngmvc自带的全局异常处理类,
* 当业务逻辑抛出异常时都会被该类拦截并进行处理.
*
* @Author xxx
* @Version 1.0
* @see
*/
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);
ex.printStackTrace();//打印异常信息
// 根据不同错误转向不同页面
if (ex instanceof CSRFException) {//受到csrf攻击
return new ModelAndView("/errorPage/error", model);
}
if (ex instanceof BusinessException) {//业务逻辑处理出错
return new ModelAndView("errorPage/businessError", model);
} else if (ex instanceof ParameterException) {//参数处理出错。
return new ModelAndView("errorPage/parameterError", model);
} else {  //其他数据类型错误
return new ModelAndView("errorPage/error", model);
}
}
}


当存在异常时,如果业务代码无法处理,那么就可以抛出让springmvc进行全局处理. 避免将大量异常代码侵入到业务代码中导致无法维护的后果.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息