zoukankan      html  css  js  c++  java
  • spring mvc 全局异常

    客户端请求controller,为了不让异常返回到客户端,需把controller层的异常拦截掉,对异常进行包装然后再返回到客户端。

    图解:

    dispatcher-servlet.xml里单独配置controller的包扫描,dispatcher-servlet.xml里的包扫描是springmvc的包扫描。所以要单独把controller的包单独抽出来放在这。扫描controller注解。把@Controller加到类上,它就变成了一个ctroller。这里只扫描controller,所以把spring的默认扫描关闭: use-default-filters="false"。即默认扫描不扫了,但一定会扫include里的包:
     <context:component-scan base-package="cn.it.controller" annotation-config="true" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
     </context:component-scan>

    可以自己加运行时异常进行测试:
      int a = 0;
      int b = 66 / a;
    这个就是运行时异常,只有在运行时才会报出来。

    在common包里建工具类ExceptionResolver 并加component注解就好了:

    @Slf4j
    @Component
    public class ExceptionResolver implements HandlerExceptionResolver{
      public ModelAndView resolveException(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2,Exception arg3) {
        log.error("{} exception", arg0.getRequestURI(),arg3);//这一行要写,不然在服务端也看不到异常信息了。
        ModelAndView modelAndView = new ModelAndView(new MappingJacksonJsonView());//当使用jackson2.x时使用MappingJackson2JsonView,这里使用的是1.9
           modelAndView.addObject("status", ResponseCode.ERROR.getCode());
           modelAndView.addObject("msg", "接口异常,详情请查看日志中的异常信息");
           modelAndView.addObject("data",arg3.toString());
           return modelAndView;
      }
    }
  • 相关阅读:
    在vmware workstation10上安装ubuntu14.04,出现以下问题
    经典句
    杂文
    matlab里textread出现错误“Trouble reading floating point number from file (row 1, field 1)”
    Nginx配置杂记(转)
    mysql经典案例分析
    Git查看、删除、重命名远程分支和tag(转)
    nginx下开启pathinfo模式
    ubuntu-apache如何解决跨域资源访问
    c语言插入排序
  • 原文地址:https://www.cnblogs.com/yigechengxuyuan/p/8385062.html
Copyright © 2011-2022 走看看