SpringBoot 项目 全局拦截异常不生效

问题描述

1、项目为微服务项目,新添加的模块中,在业务代码中,有抛出异常代码,代码示例为

throw new BusinessException("此处抛出了一个异常!");

2、该项目,有一个公共模块(common),改模块中声明了吹全局异常的代码,代码示例如下:

@ControllerAdvice
public class BusinessExceptionHandler {

    /**
     * 处理自定义的业务异常
     *
     * @param e 异常
     * @return
     */
    @ResponseBody
    @ExceptionHandler(value = BusinessException.class)
    public R TestExceptionHandler(BusinessException e) {
        R r = new R();
        if (e.getCode() == 0) {
            r.put("code", R.CODE_500);
        } else {
            r.put("code", e.getCode());
        }
        r.put("msg", e.getMessage());
        return r;
    }
}

3、在测试的过程中,运行了,抛出异常的代码,但是,公共类中处理全局异常的类并没有生效。

问题分析

1、出现以上问题,很明显的一个地方是,上述,公共类中的全局异常处理没有生效。
2、从原理上出发,来分析问题,我们都知道的是,对于SpringBoot项目,启动时默认,会扫描的到的类为该启动类所在的文件夹及其文件夹的子目录;当然,我们也可以设置

@SpringBootApplication(scanBasePackages = {“cn.com.test”})

来设置扫描范围。
3、本人项目中遇到的问题点是,项目示例如下:
SpringBoot 项目 全局拦截异常不生效_第1张图片
新添加的模块,启动类RestApplication所在的包为"com.hs.tutu.test",公共类,所在的包为"com.hs.tutu.common",所以,启动类代码如下设置

@SpringBootApplication
public class RestApplication {
    public static void main(String[] args) {
        SpringApplication.run(RestApplication.class,args);
    }

}

公共类中的全局异常是不生效的,启动时,没有扫描到处理全局异常的类。

解决方案

1、可以将项目启动类,往上提一层,放到"com.hs.tutu"包中,效果如下:SpringBoot 项目 全局拦截异常不生效_第2张图片
2、可以通过设置,启动类包扫描路径,代码示例如下:

@SpringBootApplication(scanBasePackages = "com.hs.tutu")
public class RestApplication {
    public static void main(String[] args) {
        SpringApplication.run(RestApplication.class,args);
    }

}

你可能感兴趣的:(SpringBoot 项目 全局拦截异常不生效)