最近在使用 Java的 Springboot 框架开发一个项目, 遇到2个百思不得其解的问题. 当时被这问题搞懵了, 为了解决这2个bug探索了好几个小时, 最终靠自己沉下心摸索, 然后定位到问题并解决! 虽然最终发现解决问题很简单, 但是通过自己进行定位,分析问题的过程,然后解决问题,成就感满满, 哈哈, 所以分享一下整个过程~
总共有2个问题:
第一个:写了一个很基础的Controller类然后访问, 结果总是404
第二个: 首先在Maven父工程中写了Swagger的配置, 创建了2个Maven子工程.
这是第一个问题的描述
http://127.0.0.1:8002/oss/file/w
就可以得到预期的返回值了,然而实际结果如下, 返回404错误
3. 开始排查问题
server.port=8002
, 然后postman也访问的也是8002端口看到这个大神写的帖子后, 突然有点思路了, 于是去检查该应用的 @ComponentScan 注解.单纯看注解写的是没问题, 然后尝试性的去看下文件所在的包, 发现...
经过排查定位, 问题显而易见, 原因是启动类上的@ComponentScan里面的配置不对导致的!(写包名的时候应该是 com.atguuigu.oss, 但多打了个u变成了com.atguuigu.oss)
由于@ComponentScan里面的配置和实际的包名不对应, 所以该应用启动时, Spring没自动加载正确包名目录下的Controller文件, 所以外部访问会出现404, 顺理成章~
因为刚才的帖子说: 如果没配置@ComponentScan, Springboot会自动加载启动类所在包下及其子包下的所有组件
@ComponentScan(basePackages = "com.atguigu")
这句话去掉了, 验证是否正常.经过重启验证, 接口访问正常了, hahaha~ 刚才是直接去掉@ComponentScan的方式解决问题的, 还有一种方法是将@ComponentScan(basePackages = "com.atguigu")
里面的配置和包名保持一致即可.
操作结果: 更改后, 新服务的swagger访问成功!!!
因为写这篇文章的时候, 感悟到了这两句诗的内涵, haha~