乐趣区

关于springboot: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、自己我的项目中遇到的问题点是,我的项目示例如下:

新增加的模块,启动类 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” 包中,成果如下:
2、能够通过设置,启动类包扫描门路,代码示例如下:

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

}
退出移动版