记一次SpringMVC访问静态资源405错误修复
前言
访问静态资源出现405错误
1 | 警告 [http-nio-8080-exec-8] org.springframework.web.servlet.PageNotFound.handleHttpRequestMethodNotSupported Request method 'GET' not supported |
1 | HTTP Status 405 - Request method 'GET' not supported |
stackoverflow解释
开启DefaultServletHandlerConfigurer
或者配置ResourceHandler
二选一
1 | public class WebConfig extends WebMvcConfigurerAdapter { |
使用
1 | @RequestMapping(value = "/path", method = RequestMethod.GET) |
替换
1 | @RequestMapping(value = "/path", method = RequestMethod.POST) |
问题是
第一步我明显配置好的了。
第二步我还不至于犯这么低级的错误(事实上就是这么低级的错误)
修bug之路
- 以为是IDEA的bug, 像Android Studio一样, 需要隔三差五的
ReBuild
一下。(405) - 删除项目目录下的
out
和target
文件夹, 重新编译运行。(405) - 新建项目, 将
Initializer
、WebConfig
复制到新项目, 编译运行。(成功) - 将全部代码复制一遍到新目录。(405)
- 将所有
@Compontent
注释, 保留一个简单的HelloWorld的@Controller
。(成功) - 一个个
@Compontent
恢复,终于找到bug所在。
问题所在
我在之前添加了个PostMapping
, 加上了TODO
后, 就忘记这件事了。
之后就开始出现访问静态资源405
错误。页面能正常打开,就是样式丢失。
1 |
|
原因就在这, name
的默认值是""
,会拦截所有不经过其他RequestMapping
的url
。
静态资源也因此被拦截, 需要通过Post
方式获取。
1 |
|
解决方法
将这段代码注释掉, 或者将PostMapping
的name
设置下。
1 |
|