Java REST API部署到Heroku后接口无法访问,本地Tomcat运行正常
排查解决步骤
- 核对请求路径的上下文前缀
本地Tomcat部署时默认将war包名称作为上下文路径(如war包名为messenger.war则路径前缀为/messenger),但Heroku使用webapp-runner默认将应用部署在根上下文,无额外前缀。你可以先尝试去掉路径中的/messenger段,直接请求mixas-messenger.herokuapp.com/webapi/myresource验证是否可正常访问。
如果需要保留/messenger前缀,修改Procfile配置,新增--path参数指定上下文路径:web: java $JAVA_OPTS -jar target/dependency/webapp-runner.jar --port $PORT --path /messenger target/*.war - 验证依赖打包配置
检查pom.xml中Jersey相关依赖的scope配置,不要设置为provided。本地Tomcat自带Jersey相关API包,但webapp-runner不会内置这些依赖,scope设为provided会导致依赖不会打入最终war包,运行时类缺失导致404错误。 - 本地复现webapp-runner运行效果
本地执行mvn clean package完成打包后,在本地直接运行Procfile中的启动命令(将$PORT替换为本地端口如8080),模拟Heroku的运行环境测试接口是否可正常访问,可快速定位是打包配置问题还是Heroku平台的配置问题。 - 检查包扫描配置
确认web.xml中Jersey Servlet的jersey.config.server.provider.packages参数值,和你的资源类所在包路径完全匹配,确保服务启动时可以扫描到资源类注册接口。
内容的提问来源于stack exchange,提问作者Kostas Thanasis
相关产品推荐
相关产品推荐

