[問題] springMVC取得所有mapping URL

作者: cyclone350 (老子我最神)   2014-08-12 17:44:50
大家好
目前在使用 spring MVC, 想做一個功能,但是遇到一些奇妙的問題,雖然最後有解
但仍覺得怪怪的
問題描述有點長,所以我盡量長話短說。
要做的功能是,能夠知道所有 requestMapping 的 URL !!
大致上就是有一個頁面可以去 觀看哪一個 URL 會對應到 哪個 controller 的哪一個
method
查到的解答如下
http://ppt.cc/LzT4
http://ppt.cc/DQig
問題來了,當我仿照產生一個 controller,啟動時卻出現錯誤
錯誤簡單訊息如下
No qualifying bean of type
[org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping]
found for dependency: expected at least 1 bean which qualifies as autowire
candidate for this dependency.
我對於訊息的理解是,從spring的context找不到RequestMappingHandlerMapping 這個
type
於是我又寫了一個頁面去檢查目前spring context所有的 bean
程式碼大致如下
https://gist.github.com/frank780117/e65f2b986adc3119a838
所查出來的結果頁面圖
http://i.imgur.com/PzHuH3v.png
的確是有 RequestMappingHandlerMapping 這一個 bean... class type 也的確是
RequestMappingHandlerMapping.class
比較值得注意的是bean 名稱後面有加上 #0
查了一下是說如果 同一個 bean type有多個的話,就會在後面編號 #0 , #1 這樣
在其他重複的bean我的確有看到 #0, #1
不過 RequestMappingHandlerMapping 只有 #0 ....? 找不到其他的
RequestMappingHandlerMapping#1 之類的
可能是我的程式碼
@Autowire
List<ApplicationContext> appContext;
並不是全部的ApplicationContext ?
回到最原始的問題,為什麼用 @Autowire RequestMappingHandlerMapping 會取不到 ?
我從 context 的卻找得到這個 bean, 如果 RequestMappingHandlerMapping 是多個的話
我的 @Autowire List<> 也會失敗...
最後功能我是做出來了,不過是從 appContext 自己抓出
RequestMappingHandlerMapping 來做處理
結果圖如下
http://i.imgur.com/vAWuAeV.png
不過我還是非常困擾
為什麼 @Autowire 會唯獨取不到 RequestMappingHandlerMapping
我取其他的 dependcy 就很正常...
不知道是哪一個觀念搞錯了...
另外我很確定
@Autowire
List<ApplicationContext> appContext;
並不會得到全部的 Context,至於為什麼我也不曉得
最後其實網路上也有查到相同問題
http://ppt.cc/8uxd
二樓回答,三樓就解了,不過英文太差不瞭解二樓再說什麼...
感謝大家幫忙了
作者: phstudy (study)   2014-08-12 18:26:00
有機會看到servlet-context.xml跟root-context.xml嗎?
作者: ssccg (23)   2014-08-12 18:30:00
大概是RequestMappingHandlerMapping是在servlet-context才生出來的,但是你的root-context scan的時候就嘗試建立你的controller所以找不到?
作者: yyc1217 (somo)   2014-08-12 21:04:00
你可以把log level設為info,看看spring在啟動時的順序不過我一直以為ApplicationContext只有一個耶...然後需要你的設定檔,不然也只是在這裡瞎猜而已這樣的話就是第一次scan時要exclude @Controller第二次再針對base-package=你的controller package或是include @Controller印象中spring好像是先找bean,才做url mapping所以autowired的當下才沒有東西,但啟動後卻在context有

Links booklink

Contact Us: admin [ a t ] ucptt.com