簡體   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