[问题] 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