关于异常的抛出,捕获和拦截的新理解

Spring异常统一处理
本文介绍如何使用Spring注解实现异常的统一拦截处理,并提供了一段示例代码来说明不同类型的异常如何被恰当处理,以及为何在DAO层抛出异常时不应被捕获。

不求其他,记录下吧

异常抛出处理如果采用spring拦截处理,不要捕获,否则拦截将不会生效

@ExceptionHandler
    @ResponseBody
    public Object processGlobalExceptions(HttpServletRequest request,HttpServletResponse httpResponse, HandlerMethod handlerMethod, Exception e ) throws Exception {
        if (e instanceof ServiceLogicalException) {
             if(RKWebUtil.isAjax(request)){
                 RKWebUtil.respJSON(httpResponse, ajaxError(e.getMessage()));
                 return null;
             }else{
                 httpResponse.setHeader("rk_header_msg", java.net.URLEncoder.encode(e.getMessage(), "UTF-8"));
                 RKWebUtil.redirect(request, httpResponse, RkConst.error_page.error_page_300);
                 return null;
             }
        } else if (e instanceof UnauthorizedException||e instanceof UnauthenticatedException) {//未授权
            StringBuffer msg=new StringBuffer().append("您没有该操作权限");
            
            if(RKWebUtil.isAjax(request)){
                RKWebUtil.respJSON(httpResponse, ajaxError(defaultAuthError+","+msg));
                 return null;
             }else{
                 RKWebUtil.redirect(request, httpResponse, RkConst.error_page.error_page_401);
                 return null;
             }
        }else if(e instanceof Exception){
                e.printStackTrace();
                
             if(RKWebUtil.isAjax(request)){
                 RKWebUtil.respJSON(httpResponse, ajaxError(defaultServerError ));
                  return null;
             }else{
                 RKWebUtil.redirect(request, httpResponse, RkConst.error_page.error_page_500);
                  return null;
             }
        }
        return null;
    } 

采用spring注解对异常进行统一拦截处理

175044_Vt33_2003574.png

在dao层有个异常抛出

此时,在任何时候都不要对该异常进行捕获,否则拦截将不会生效

由此猜测,异常只要捕获了,后续就不会再次出现

经过几次百度好像确实是这样的,异常上理解又了解一点点

转载于:https://my.oschina.net/hedaoxy/blog/820953

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值