迁移至Spring Boot 3与Spring 6后上下文路径NotFound问题求助
Spring Boot 3.2.0 + Spring 6 迁移后 /health 接口404排查思路
1. 核对外部服务器的上下文路径
外部服务器(如Tomcat)部署WAR包时,默认会把WAR包名作为上下文根。比如WAR包名为demo-app.war,实际访问路径应为http://host:port/demo-app/health,而非直接/health。
- 可通过服务器控制台查看应用的上下文路径配置,也可在
application.properties/application.yml中显式指定:server.servlet.context-path=/your-custom-path
2. 验证组件扫描范围
检查@ComponentScan(basePackages = "demo.com")是否覆盖了DemoController所在的包:
- 若控制器在
demo.com.controller子包下,当前配置有效;若迁移后调整过包结构,会导致控制器未被Spring容器扫描注册。 - 启动日志中搜索
Mapped "{[/health],methods=[GET]}",无此日志则说明控制器未加载。
3. 排查路径匹配策略变更
Spring Boot 3.x默认使用PATH_PATTERN_PARSER路径匹配策略,替代了旧版的ANT_PATH_MATCHER,若代码依赖旧策略逻辑,会导致路径匹配失败:
- 可临时切换回旧策略验证:
注:官方不推荐长期使用旧策略,建议适配新规则。spring.mvc.pathmatch.matching-strategy=ant_path_matcher
4. 检查Spring Boot Actuator冲突(若引入该依赖)
若项目引入spring-boot-starter-actuator,其自带的/health端点可能覆盖自定义接口,或因Actuator路径配置导致访问路径变化:
- 检查Actuator相关配置:
若存在冲突,可调整自定义接口的路径,或修改Actuator的端点配置。# 确认端点是否启用 management.endpoints.web.exposure.include=health # 检查Actuator基础路径 management.endpoints.web.base-path=/actuator
5. 验证服务器兼容性与启动日志
- Spring Boot 3.x要求Servlet容器支持Servlet 6.0,需确认外部服务器版本符合要求(如Tomcat 10.1+、Jetty 11+),旧版本容器会导致应用初始化失败。
- 查看服务器日志,排查是否存在类加载异常、Bean初始化失败等错误,这类问题会导致控制器无法正常注册。
6. 核对请求的方法与路径
- 确认请求使用GET方法,路径拼写完全正确(Spring Boot默认路径不区分大小写,但新策略下需验证)。
- 用Postman或浏览器开发者工具查看实际请求的URL和HTTP方法是否与接口定义一致。
内容的提问来源于stack exchange,提问作者Shivayan Mukherjee
相关产品推荐
相关产品推荐

