Spring boot 子模塊不同包名下controller接口404問題解決方案


項目背景,在做項目時使用了一套別人的Spring boot三方開源系統當基礎框架,然后在此系統基礎上增加子模塊,書寫新的controller接口和業務邏輯。項目結構如下圖:

system是@SpringBootApplication標注類所在的主工程模塊,statistics是我建立的子模塊,我在該子模塊下建立了controller接口,也進行了注解,但是啟動后訪問該接口,提示404錯誤找不到該接口。


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

經過排查解決過程如下:

1、@SpringBootApplication標注類一定要增加@ComponentScan標注,標識主模塊包名+子模塊包名

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2、務必在主模塊pom.xml中依賴子模塊,網上很多教程根本沒說這一步,只說使用@ComponentScan標注,只使用@ComponentScan標注,親測無效!

 

 

 

 3、@ComponentScan標注了,主模塊pom.xml把子模塊也導入后,務必刷新maven依賴,否則還是不會生效,不要以為直接run就可以了,我就是被這里坑了一下午,點擊Reload project

 

 4、這時可以運行了,各位可以看到,一個完全不同包名的子模塊下的controller接口,在swagger中顯示出來了,打完收工!

 

 

5、原理性的東西補充一下,Spring Boot在進行組件掃描時

5.1 如果你的其他包層次結構位於使用@SpringBootApplication標注主應用程序下方,則隱式組件掃描將自動涵蓋。也就是說,不要明確標注@ComponentScan,Spring Boot會自動搜索當前應用主入口目錄及其下方子目錄。
5.2 如果其他包中的bean /組件不在當前主包路徑下面,,則應手動使用@ComponentScan 添加,指定需要掃描的路徑,他就會完全按你指定的路徑進行掃描,所以你必須指定主工程、子模塊所有的包名
5.3 如果使用了@ComponentScan ,那么Spring Boot就全部依賴你的定義,如果定義出錯,會出現autowired時出錯,報a bean of type that could not be found錯誤,讓你很惱火哦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM