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