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

Spring中AJAX GET请求返回404问题求助(含相关代码)

排查Spring + Tomcat 9中/login接口404的问题

咱们一步步拆解这个404问题,核心原因基本是接口路径没被Spring正确映射,或者Spring压根没找到你的LoginController,下面是具体排查和修复步骤:


1. 最可能的原因:Spring没扫描到你的LoginController

看你提供的spring-config-servlet.xml,里面没有配置组件扫描和MVC注解驱动,这会导致Spring无法发现带有@Controller注解的类,自然也就不会注册对应的接口路径。

修复方法:

在spring-config-servlet.xml中添加以下配置(记得把包路径换成你实际的Controller所在包,比如你的LoginController在com.blog.controller下):

<!-- 启用Spring MVC注解驱动,支持@RequestMapping等注解 -->
<mvc:annotation-driven/>
<!-- 扫描Controller所在的包,让Spring识别你的控制器类 -->
<context:component-scan base-package="com.blog.controller"/>

2. Controller的路径映射重复,导致实际接口路径不匹配

你的LoginController类上标注了@RequestMapping("/login"),同时方法上又加了@RequestMapping(value = { "/login" }, method = RequestMethod.GET),这会导致实际的接口路径变成**/login/login**,但前端请求的是/login,自然会返回404。

修复方法(二选一):

  • 方案一:去掉类上的@RequestMapping
    直接删除类上的@RequestMapping("/login"),这样方法上的/login就是最终的接口路径,和前端请求一致:

    // 去掉类上的@RequestMapping("/login")
    @Controller
    public class LoginController { 
        @Autowired 
        private UserService userService; 
        
        @RequestMapping(value = "/login", method = RequestMethod.GET) 
        @ResponseBody 
        public int checkValid(/* 参数列表不变 */){ 
            // 原有逻辑不变
        } 
    }
    
  • 方案二:调整类上的路径前缀
    把类上的@RequestMapping改成其他前缀,比如/auth,这样接口路径变成/auth/login,同时前端ajax的url也要对应改成auth/login:

    @RequestMapping("/auth")
    @Controller
    public class LoginController { 
        // ... 其他代码不变
        @RequestMapping(value = "/login", method = RequestMethod.GET) 
        @ResponseBody 
        public int checkValid(/* 参数列表不变 */){ 
            // 原有逻辑不变
        } 
    }
    

    前端代码修改:

    $.ajax({ 
        url:"auth/login", // 这里改成对应路径
        // 其他配置不变
    });
    

3. 检查DispatcherServlet的映射配置(web.xml)

确保你的web.xml中,Spring的DispatcherServlet映射路径是/,这样所有请求都会经过Spring MVC处理。如果映射的是*.do这类后缀,那你的接口路径需要带上.do,前端请求也得对应修改。

标准的DispatcherServlet配置示例:

<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-config-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <!-- 映射所有请求,除了静态资源 -->
    <url-pattern>/</url-pattern>
</servlet-mapping>

4. 小细节:前端AJAX的contentType设置(不影响404,但可以优化)

你前端AJAX设置了contentType: 'application/json;charset=utf-8',但GET请求的参数是通过URL传递的(你用的是data: { username:..., password:... },jQuery会自动转成URL参数),这个contentType设置对GET请求无效,可以删掉或者改成application/x-www-form-urlencoded,不过这不是导致404的原因。


最后验证步骤

  1. 把上述修改完成后,重启Tomcat服务器
  2. 打开浏览器的开发者工具(F12),重新发起登录请求,查看请求的URL是否和你配置的接口路径一致
  3. 如果还是有问题,可以查看Tomcat的日志,看看Spring启动时有没有扫描到LoginController类

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:02:40