@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/]都可以

总结:当上下级路径一致时,不会出现连续相同路径,第一个值会被消化掉,具体原因得看源码,暂未研究。

为了安全起见,上下级路径设置不同。

猜你喜欢

转载自wenzy-way.iteye.com/blog/2354195