繁体   English   中英

Spring MVC Controller配置 - 混合注释和XML @PathVariable

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM