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

Spring Boot @RestController 404:PaymentController部署后无法访问问题

问题分析与解决方案

本地运行时两个RestController均可正常访问,但部署后仅PaymentMethodController可用,PaymentController请求返回404,结合代码和场景,可从以下几个方向排查:

1. 常量拼接的实际路径验证

API和NO_AUTH这两个常量的取值在本地与部署环境可能存在差异,导致最终的请求路径不匹配:

  • 在PaymentController的构造方法或启动类中添加日志,输出拼接后的完整路径:
    log.info("PaymentController base path: {}", API + NO_AUTH + "/payments");
    
  • 对比本地和部署环境的日志输出,确认路径是否一致,比如是否部署环境多了上下文前缀,或者常量值被环境变量覆盖。

2. 组件扫描与打包完整性检查

  • 确认Spring Boot主类ApplicationStarter的@ComponentScan覆盖了控制器所在的包:默认情况下主类所在根目录及子包都会被扫描,若控制器在非子包路径下,需手动指定@ComponentScan(basePackages = "你的控制器包路径")。
  • 解压部署包(jar/war),检查BOOT-INF/classes(jar包)或WEB-INF/classes(war包)中是否存在PaymentController.class文件,排除打包时遗漏类的情况。

3. 路径匹配优先级与日志调试

开启Spring MVC的调试日志,查看请求匹配过程:

  • 在部署环境的配置文件中添加:
    logging.level.org.springframework.web=DEBUG
    
  • 发起PaymentController的请求,查看日志中是否有路径匹配的记录,确认请求是否被其他处理器(比如错误控制器)拦截,或者路径匹配规则是否与预期不符。

4. 上下文路径与请求URL正确性

  • 检查部署环境是否设置了server.servlet.context-path(比如Tomcat的上下文路径),若有,请求URL需要加上该前缀。例如本地请求/api/no-auth/payments/create,部署后上下文路径为/app,则需请求/app/api/no-auth/payments/create。
  • 确认请求方法是否正确:PaymentController的接口都是@PostMapping,需确保请求使用POST方法,而非GET。

5. 拦截器/安全配置排查

若项目使用Spring Security或自定义拦截器:

  • 检查安全配置中是否放行了/payments/**路径,避免因权限拦截导致返回404(部分拦截器配置错误会返回404而非403)。
  • 排查自定义拦截器是否过滤了PaymentController的请求路径,导致请求未到达控制器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 12:22:12