今天調試前輩的程式碰到一個問題,請求某一指定路徑,發現報找不到路徑的問題
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/]都可以
總結:當上下級路徑一緻時,不會出現連續相同路徑,第一個值會被消化掉,具體原因得看源碼,暫未研究。
為了安全起見,上下級路徑設定不同。