今天调试前辈的程序碰到一个问题,请求某一指定路径,发现报找不到路径的问题
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/]都可以
总结:当上下级路径一致时,不会出现连续相同路径,第一个值会被消化掉,具体原因得看源码,暂未研究。
为了安全起见,上下级路径设置不同。