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

迁移至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相关配置:
    # 确认端点是否启用
    management.endpoints.web.exposure.include=health
    # 检查Actuator基础路径
    management.endpoints.web.base-path=/actuator
    
    若存在冲突,可调整自定义接口的路径,或修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:22:15