天天看點

@RequestMapping上下級請求路徑重複産生的問題

今天調試前輩的程式碰到一個問題,請求某一指定路徑,發現報找不到路徑的問題

No Mapping found for HTTP request with URL [/dahuaIS/rest/icarus/icarus]

如上路徑dahuaIS為工程名,

rest為web.xml配置的攔截路徑,

第一個icarus是控制層Controller類的@RequestMapping("/icarus") [1]值

第二個icarus是攔截方法上的@RequestMapping(value="/icarus",..) [2]參數。

為什麼沒有按着期望成功進入到方法裡面呢?

一、經過排查發現如上@RequestMapping配置在Sping MVC初始化時裝載了如下路徑

[/icarus]

[/icarus.*]

[/icarus/]

[/icarus/icarus.*]

[/icarus/icarus/]

為什麼會裝載成以上路徑?這個要去看源碼。

如上路徑沒有一個能比對我們期望的[/icarus/icarus]

二、當修改[2]式的值為@RequestMapping(value="/icarus/",..)

裝配的路徑隻剩下

[/icarus/icarus/]

此時按着[/dahuaIS/rest/icarus/icarus/]就能通路到。

三、正常情況上下級路徑都不一樣

[2]式改為@RequestMapping(value="/search",..)

此時裝配路徑為

[icarus/search]

[icarus/search.*]

[icarus/search/]

此時不管是請求[icarus/search]還是[icarus/search/]都可以

總結:當上下級路徑一緻時,不會出現連續相同路徑,第一個值會被消化掉,具體原因得看源碼,暫未研究。

為了安全起見,上下級路徑設定不同。