我正在爲一個webapp構建rest API,並且遇到了RequestMapping的問題。Spring MVC RequestMapping匹配錯誤的URL
Basicaly有用戶,它們被分組到不同的域中。當他們與系統一起工作時,一些信息被存儲在一個名爲「會話」的對象中並寫入數據庫。
我有以下網址:
1)http://server.com/api/v1/domain/ 則domainName /會話 - 顯示有關域中所有用戶的所有會話的信息。
2)http://server.com/api/v1/domain/ 則domainName /用戶/ 的userName /會話 - 顯示關於特定用戶的會話的信息。
我使用彈簧3.0.5,並已宣佈2個處理器在我的控制器類:
@RequestMapping(value = "/{domainId}/sessions", method=RequestMethod.GET)
public void findSessions(@PathVariable final String domainId) {
...
}
@RequestMapping(value = "/{domainId}/user/{username}/sessions", method=RequestMethod.GET)
public void findUserSessions(
@PathVariable final String domainId,
@PathVariable final String username) {
...
}
我使用的是混合控制器的映射:指定SimpleUrlHandlerMapping建立+註釋
爲控制器基本路徑使用SimpleUrlHandlerMapping建立:
<property name="mappings">
<value>
/api/v1/domain/** = api.DomainsController
</value>
</property>
的問題是,既URL由第一種方法處理。對於URL 2,用戶名綁定到domainId pathvariable,因此制動方法邏輯。
但是,如果我指定請求映射中的完整路徑 - 它工作正常。
@RequestMapping(value = "/api/v1/domain/{domainId}/sessions", method=RequestMethod.GET)
@RequestMapping(value = "/api/v1/domain/{domainId}/user/{username}/sessions", method=RequestMethod.GET)
好吧,這並不像刪除SimpleUrlHandlerMapping條目和添加@RequestMapping那麼簡單,但是在一些網絡谷歌搜索之後,我終於設法與他們離婚了。 (因爲還有其他的'傳統'控制器,我不能總體降低SUHM)。它現在可以正確使用DefaultAnnotationHandlerMapping – dvd 2011-05-16 12:57:47
HI,您可以告訴我在RequestMapping URL中使用{}括號。 – 2016-11-09 10:31:03
@AravindRPillai它們用於指定路徑變量。 – Willa 2017-03-08 16:05:04