springmvc全局异常处理

对于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进行全局处理. 避免将大量异常代码侵入到业务代码中导致无法维护的后果.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值