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

Ajax + Spring MVC:无法找到目标地址问题排查求助

排查Spring MVC Ajax 404错误的步骤

看起来你的Ajax请求根本没到达控制器方法,结合错误信息里的path":"/$%7Bhome%7D/search/a..."(这里的$%7Bhome%7D是${home}的URL编码),大概率是请求路径未正确解析或匹配导致的。下面一步步来排查解决:

  • 第一步:修正Ajax请求的URL,确保路径合法
    你错误里的路径包含未解析的${home},说明你可能直接在JS代码里写了EL表达式,但纯前端文件(比如HTML/独立JS)无法解析EL。如果home是项目上下文路径,正确的做法是先在后端页面(如JSP)里解析好再传给JS:

    <%-- 在JSP页面中提前解析上下文路径 --%>
    <script>
    var basePath = "${pageContext.request.contextPath}";
    // 构造正确的Ajax请求URL
    $.ajax({
        url: basePath + "/search/你的具体接口路径",
        type: "POST", // 必须和控制器方法的请求方法匹配
        data: { "参数名": $("#输入框ID").val() },
        success: function(result) {
            // 处理返回结果
        },
        error: function(xhr) {
            console.log(xhr.responseText);
        }
    });
    </script>
    

    同时打开浏览器开发者工具(F12)的Network标签,查看实际发送的请求URL,确认它和控制器的映射路径完全一致。

  • 第二步:检查控制器的映射配置是否正确
    确保控制器类和方法的注解没有问题:

    1. 控制器类必须加@Controller注解,且Spring已经扫描到这个类。比如XML配置里要加<context:component-scan base-package="com.yourpackage.controller"/>,注解配置里用@ComponentScan指定控制器所在包。
    2. 方法上的@RequestMapping(或@PostMapping/@GetMapping)路径要和Ajax请求的URL对应。举个例子:
      @Controller
      @RequestMapping("/search")
      public class SearchController {
          @PostMapping("/getResult") // 完整路径是 /项目上下文/search/getResult
          @ResponseBody // 必须加这个,否则Spring会试图找视图而非返回JSON
          public String getSearchResultViaAjax(@RequestParam String keyword) {
              System.out.println("in getSearchResultViaAjax");
              // 业务逻辑处理
              return "搜索结果";
          }
      }
      
    3. 确认请求方法匹配:如果控制器用@PostMapping,Ajax的type必须是POST;用@GetMapping则对应GET,不匹配可能导致404或405错误。
  • 第三步:检查Spring MVC核心配置

    1. 确认DispatcherServlet的映射路径正确。在web.xml里,DispatcherServlet的映射应设为/,确保所有请求都经过它处理:
      <servlet>
          <servlet-name>dispatcher</servlet-name>
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
          <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
          <servlet-name>dispatcher</servlet-name>
          <url-pattern>/</url-pattern>
      </servlet-mapping>
      
    2. 启用注解驱动:XML配置里加<mvc:annotation-driven/>,注解配置里加@EnableWebMvc,这样Spring才能识别@RequestMapping等注解。
  • 第四步:调试验证
    修正路径后重新触发请求,查看Network里的请求状态:如果变成200,说明请求已到达控制器,控制台应该会输出你添加的日志。如果还是404,再检查路径拼写、控制器扫描范围、DispatcherServlet配置这些细节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:40:12