You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 1.5迁移2.0后Web服务出现404/405错误求助

刚帮朋友踩过Spring Boot 1.5升2.0的坑,结合你遇到的GET 404、POST 405的问题,咱们一步步排查:

核心排查方向及解决方案

1. 路径匹配规则的重大变化(最常见原因)

Spring Boot 2.0把Spring MVC默认的路径匹配策略从AntPathMatcher换成了PathPatternParser,这个改动会直接影响请求和Controller注解路径的匹配逻辑,尤其是带尾斜杠、点号的路径。

  • 先快速验证:在application.properties里添加配置:
    spring.mvc.pathmatch.matching-strategy=ant_path_matcher
    
    重启服务后测试请求,如果问题解决,说明是路径匹配规则导致的,接下来需要调整你的@GetMapping/@PostMapping路径写法(比如去掉不必要的尾斜杠,规范路径格式)。

2. Undertow配置的兼容性问题

你用的是Undertow容器,Spring Boot 2.0对Undertow的配置项做了不少调整,旧版本的配置可能会干扰请求处理:

  • 检查配置文件里有没有遗留的1.5版本Undertow参数,比如server.undertow.access-log-pattern这类,换成2.0对应的写法;
  • 可以先暂时清空Undertow的自定义配置,只保留必要的端口、上下文路径配置,排除配置冲突的可能。

3. Spring Security拦截规则的隐性冲突

你说Security过滤器正常工作,但很可能是Security的拦截规则把请求挡住了,导致请求根本没到Controller层:

  • 检查你的Security配置类,Spring Boot 2.0里WebSecurityConfigurerAdapter的默认行为有变化,比如默认拦截的路径范围;
  • 临时放宽拦截规则测试:在configure(HttpSecurity http)方法里添加.antMatchers("/**").permitAll(),如果此时Controller能正常响应,说明是Security的规则限制了请求;
  • 别忘了开启Security的DEBUG日志,能看到具体的拦截流程。

4. Controller组件扫描失效

Spring Boot 2.0的组件扫描逻辑虽然变化不大,但如果启动类位置不对,会导致Controller无法被扫描到:

  • 确认带@SpringBootApplication的启动类在根包下(比如你的Controller在com.example.api,启动类要在com.example);
  • 如果启动类位置不合适,在@SpringBootApplication里显式指定扫描范围:@SpringBootApplication(scanBasePackages = {"com.example.api", "com.example.security"});
  • 再检查一遍Controller类上有没有加@RestController(或@Controller + @ResponseBody),别漏加注解导致组件不被识别。

5. 依赖版本冲突

确保所有Spring生态的依赖版本和Spring Boot 2.0的版本一致,尤其是Undertow、Spring MVC、Spring Security:

  • 用Maven的mvn dependency:tree或Gradle的./gradlew dependencies查看依赖树,排查有没有版本不一致的依赖;
  • 尽量用Spring Boot的父依赖来统一管理版本,避免手动指定Undertow等组件的版本,减少冲突。

6. 上下文路径的实际生效验证

你已经把server.context-path改成了server.servlet.context-path,但要确认请求时是否带上了正确的上下文路径:

  • 查看启动日志,Undertow会输出类似Undertow started on port(s) 8080 (http) with context path '/your-app'的日志,确认上下文路径配置生效;
  • 请求时要带上这个路径,比如配置的是/my-app,那GET请求应该是http://localhost:8080/my-app/your-api,而不是直接访问/your-api。
辅助调试技巧

开启Spring MVC和Security的DEBUG日志,能清晰看到请求的处理流程,帮你快速定位问题:

logging.level.org.springframework.web=DEBUG
logging.level.org.springframework.security=DEBUG

日志里会显示请求是否进入DispatcherServlet、有没有匹配到Controller方法、Security是否拦截了请求等关键信息。

内容的提问来源于stack exchange,提问作者asyncmind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:28:14