Ele*_*naT 5 java spring annotations controller spring-3
我在我的控制器上使用Spring 3.0.5 <context:component-scan>和@RequestMapping注释.这样可以工作,并且包扫描会注册URL.
但是当我在XML配置中定义了处理程序映射时会出现问题.该@RequestMapping注释不再拾起.
我已将问题分离到一个简单的应用程序.
如果我有以下控制器:
package test.pack.age;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class TestController {
@RequestMapping(value="/test")
public String showTestPage() {
return "testPage";
}
}
Run Code Online (Sandbox Code Playgroud)
以及以下配置:
<context:component-scan base-package="test.pack.age" />
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
Run Code Online (Sandbox Code Playgroud)
应用程序正常工作,URL /test已注册并正常工作.
18/09/2011 20:02:55 org.springframework.web.servlet.handler.AbstractUrlHandlerMapping INFO Mapped URL path [/test] onto handler 'testController'
18/09/2011 20:02:55 org.springframework.web.servlet.handler.AbstractUrlHandlerMapping INFO Mapped URL path [/test] onto handler 'testController'
Run Code Online (Sandbox Code Playgroud)
但是如果我添加一个映射到XML的处理程序,它就不再起作用了.即使是这样简单的东西:
<bean id="handlerMappings" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" />
Run Code Online (Sandbox Code Playgroud)
这基本上什么都不做,并且<context:component-scan>不再注册我的URL.
我需要一些我无法注释的(第三方)控制器的额外处理程序映射,但是在添加它时它会破坏我@RequestMapping的所有.
这是正常的吗?一个bug?(我无法更改Spring版本)
我错过了什么吗?
这是正常的吗?一个错误?(我无法更改 Spring 版本)
我错过了什么吗?
我错过了一些东西:D。发现这个隐藏在 Spring 的DefaultAnnotationHandlerMapping的 JavaDocs 中:
注意:如果您在 DispatcherServlet 上下文中定义自定义 HandlerMapping bean,则需要显式添加 DefaultAnnotationHandlerMapping bean,因为自定义 HandlerMapping bean 会替换默认映射策略。
将其添加到我的配置 XML 中,现在一切正常:
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3847 次 |
| 最近记录: |