zoukankan      html  css  js  c++  java
  • springMVC--全局异常处理

    全局异常主要处理controller中抛出的异常,需注意controller中不需要捕获异常

    一、@ControllerAdvice + @ExceptionHandler 实现全局异常处理

    1、@ControllerAdvice 中申明@ExceptionHandler 方法,对所有controller中的@RequestMapping方法有效。

    2、@Controller 中申明@ExceptionHandler 方法,仅对当前controller中的@RequestMapping方法有效。

    全局异常处理类GlobalErrorHandler .java代码如下(需保证该类所在路径可以被扫描加载到spring容器):

    package com.tianwen.dcdp.exception.handler;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
    
    @ControllerAdvice
    public class GlobalErrorHandler {
    
        /**
         * 检查是否ajax请求
         * @param request
         * @return
         */
        public static boolean isAjax(HttpServletRequest request) {
            return request.getHeader("X-Requested-With") != null &&
                    "XMLHttpRequest".equalsIgnoreCase(request.getHeader("X-Requested-With"));
        }
        
        /**
         * 全局异常处理
         * @param request
         * @param response
         * @param ex
         * @return
         * @throws Exception
         */
        @ExceptionHandler(Exception.class)
        public Object errorHandler(HttpServletRequest request,
                HttpServletResponse response,
                Exception ex) throws Exception{
            if(isAjax(request)) {
                //如果是ajax请求,返回json数据
                ModelAndView mav = new ModelAndView(new MappingJackson2JsonView());
                mav.addObject("result", 0);
                mav.addObject("msg", ex.getMessage());
                return mav;
            } else {
                //如果不是ajax请求,跳转到错误页面
                ModelAndView mv = new ModelAndView();
                mv.addObject("exception", ex);
                mv.addObject("url", request.getRequestURL());
                mv.addObject("msg", ex.getMessage());
                if(request.getRequestURL().toString().contains("/m/")) {
                    mv.setViewName("m/error");
                } else {
                    mv.setViewName("error");
                }
                return mv;
            }
        }
        
    }

    spring 部分配置如下:

    <!-- 自动扫描 -->
        <context:component-scan base-package="com.tianwen.dcdp">
            <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
            <context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
        </context:component-scan>

    springmvc部分配置如下:

    <context:component-scan base-package="com.tianwen.dcdp.*">
            <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
            <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
        </context:component-scan>

    如此便可实现异常的统一处理

    未完待续

  • 相关阅读:
    第十四节、FAST角点检测(附源码)
    第三十六节,目标检测之yolo源码解析
    《理财市场情绪监测系统》代码实现【1】之行业词库
    python numpy 下载地址
    hive 添加自增列
    excel做回归分析的应用【风控数据分析】
    SELECT a.loginname,a.deviceid,a.time,Row_Number() OVER (partition by a.loginname ORDER BY a.deviceid desc,a.time asc) rank
    hive cst 时间转换
    hive以文件创建表
    以当前日期命名或复制文件夹
  • 原文地址:https://www.cnblogs.com/yinz/p/9240352.html
Copyright © 2011-2022 走看看