为什么abc.html请求能匹配上 @GetMapping("/abc")?
请求:
代码:
项目整个结构:
并没有abc.html这个文件
为什么abc.html请求能匹配上 @GetMapping("/abc")?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
请求:
代码:
项目整个结构:
并没有abc.html这个文件
为什么abc.html请求能匹配上 @GetMapping("/abc")?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
我找到了答案,
package org.springframework.web.servlet.mvc.method.annotation;这个包下的 RequestMappingHandlerMapping类中的属性控制是否启用后缀匹配,
如果是true,/users路径 会匹配到浏览器的/users.*
值得注意的是使用的spring版本不一样这个值可能不一样,我看到的spring-webmvc-4.3.16.RELEASE.jar里面这个属性是true(这也是我发起这个问题的原因),而spring-webmvc-5.3.4.jar里是false
根据官方说法5.3之后变成了false
你这应该是老版本的
SpringBoot
了,首先你要知道SpringBoot
是基于Spring
的。版本对应如下表:
下面说一下你这个问题,这个特性叫做后缀匹配 SuffixMatch
在老版本中,这个特性是用来识别资源类型的,比如你问题描述中,虽然代码写的是
@GetMapping("/abc")
,但因为后缀匹配,实际上可以匹配"abc.html","abc.pdf","abc.json"等等,这个特性在以前是很有帮助的,但是现在浏览器可以使用"Accept" head头来指明资源类型,也就不需要SpringFramework
再"多此一举"了,而且因为这个特性的存在,很多人认为是个bug
,纷纷给Spring
提了很多 issue所以,从Spring5.3开始,这个特性就默认关闭了,所以如果你使用的是目前最新的SpringBoot2.4,就不会遇到这个问题。
当然,既然你碰到了,想要在老版本中关闭,官方也提供了关闭办法,原文如下:
既然都说到了这里,就顺便把配置类也一块给你贴上吧:
自己粘贴到代码里试试吧,有问题欢迎私信我