[英]Spring MVC Controller configuration - mixing annotations and XML @PathVariable
我正在使用Spring MVC框架(v3)开发一个Web应用程序。
目前我定义了几个控制器类 - 我通过扩展MultiActionController创建了它们,然后在我的web mvc XML配置中定义了bean和URL映射:
QuestionController.java:
public class QuestionController extends MultiActionController implements InitializingBean
{
webmvc-config.xml中
<bean id="questionController" class="com.tmm.enterprise.microblog.controller.QuestionController"></bean>
...
<bean id="fullHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="alwaysUseFullPath" value="true" />
<property name="mappings">
<props>
<prop key="/question/**">questionController</prop>
</props>
</property>
</bean>
这工作正常,我在我的控制器中定义匹配被调用的URL的方法,一切正常(例如,我有一个list(..)
方法,当我浏览/question/list
时,它正确执行)。
但是,对于这个特定的控制器,我想利用Spring中的@PathVariable
选项来允许变量URL(例如,我想要一个details(..)
方法,当我调用/question/detail/9999
- 其中9999
是一个问题ID,执行方法)。 我尝试使用如下:
QuestionController.java:
@RequestMapping("/detail/{questionId}")
public ModelAndView detail(@PathVariable("questionId") long questionId, HttpServletRequest request, HttpServletResponse response) throws Exception{
但是,当我运行上面的命令时,我得到一个错误:
在
@RequestMapping
找不到@PathVariable
[questionId
]
有没有人遇到过这个? 是否可以将RequestMapping
注释与现有的XML配置URL映射混合使用?
这是来自DefaultAnnotationHandlerMapping类的注释,如果我正在阅读注释权限,如果你在QuestionController.java的顶部添加@RequestMapping,它可能会解决你的问题
带注释的控制器通常在类型级别用{@link Controller}构造型标记。 当在类型级别应用{@link RequestMapping}时,这并不是绝对必要的(因为这样的处理程序通常实现{@link org.springframework.web.servlet.mvc.Controller}接口)。 但是,如果{@link RequestMapping}在类型级别不存在,则需要{@link Controller}来检测方法级别的 {@link RequestMapping}注释。
编辑
你可以做这样的事情,将uri的/ question部分移到顶部,并将细节部分留在方法级别
@RequestMapping("/question")
public class QuestionController
{
@RequestMapping("/detail/{questionId}")
public ModelAndView detail(@PathVariable("questionId") long questionId, HttpServletRequest request, HttpServletResponse response) throws Exception{
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.