Spring v2.3.2部署Tomcat8后Axios POST请求报404错误求助
排查Spring + Axios POST请求404问题
我来帮你一步步排查这个404问题,前后端对接时这种情况确实很容易踩坑,咱们从几个常见方向入手:
1. 优先确认部署后的上下文路径是否匹配
这是最常见的坑!你本地运行时,Spring Boot默认的上下文路径是空的(或者你配置了csis),但部署到Tomcat后,上下文路径是由你的war包名称决定的:
- 如果你的war包叫
csis.war,部署后上下文路径是/csis,请求URL没问题; - 如果war包名字是其他(比如
myapp.war),或者你手动修改了Tomcat的上下文配置,那实际请求URL应该是/myapp/ajax/student/search,而非带csis的路径。
验证方法:
- 打开浏览器开发者工具的「Network」标签,触发搜索请求后,查看「Request URL」的完整路径,确认是否和Tomcat部署的上下文路径一致;
- 直接访问
http://你的Tomcat地址:端口/上下文路径,比如http://localhost:8080/csis,看是否能打开应用首页,确认上下文路径正确。
2. 检查Spring是否正确扫描到控制器
如果控制器没有被Spring容器加载,那对应的请求映射自然不存在,会返回404:
- 确认你的启动类(比如
Application.java)上的@SpringBootApplication或@ComponentScan注解包含了StudentController所在的包; - 查看Tomcat启动日志,搜索是否有类似以下的日志:
如果没有这条日志,说明控制器没被扫描到,需要调整Mapped "{[/csis/ajax/student/search],methods=[POST]}" onto public com.xxx.StudentSearch com.xxx.StudentController.searchStudent(com.xxx.Student)@ComponentScan的扫描范围。
3. 确认请求Content-Type与后端兼容
你的后端用了@RequestBody接收JSON参数,Axios默认会发送Content-Type: application/json,但需要确保:
- Tomcat没有限制JSON类型的请求;
- 前端没有意外修改了Content-Type(比如某些全局拦截器篡改了请求头)。
验证方法:
- 在开发者工具的Network标签里,查看请求的「Request Headers」,确认
Content-Type是application/json; - 用Postman直接发送POST请求到正确的URL,Body选择
raw -> JSON,传入{"studentNumber": "测试学号"},看是否能正常响应,排除前端代码的问题。
4. 排查拦截器/过滤器是否拦截了请求
如果你的应用配置了Spring Security或者自定义过滤器,可能会拦截POST请求:
- 检查Security配置,是否允许
/csis/ajax/student/search这个路径的匿名访问; - 查看过滤器的逻辑,是否有拒绝POST请求或者未正确放行的情况。
5. 检查DispatcherServlet的映射配置(非Spring Boot场景)
如果是传统的Spring MVC项目,需要确认web.xml里的DispatcherServlet映射是否正确:
<servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> <!-- 确保是/,而不是/*或者其他限制路径 --> </servlet-mapping>
如果映射路径不对,会导致Spring无法处理该请求。
按照上面的步骤逐一排查,应该能找到问题所在。最优先检查的是上下文路径和控制器扫描这两点,大部分404问题都出在这里。
内容的提问来源于stack exchange,提问作者Ian Nato
相关产品推荐
相关产品推荐

