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

Spring MVC REST Controller调用失败,访问/api/customer返回404求助

排查Spring REST Controller 404问题

从你的描述和提供的代码来看,我梳理了几个最可能导致/customer-crm/api/customer返回404的原因,按优先级逐一排查:


1. 应用上下文路径不匹配

你的pom.xml中明确配置了finalName和warName为SpringHibernateExample:

<warName>SpringHibernateExample</warName>
...
<finalName>SpringHibernateExample</finalName>

这意味着war包部署到Tomcat后,应用的上下文路径是/SpringHibernateExample,而非你当前访问的/customer-crm。

解决方法:
尝试访问正确的路径:
http://localhost:8080/SpringHibernateExample/api/customer

如果希望上下文路径为customer-crm,直接修改pom.xml中的finalName和warName为customer-crm即可。


2. 缺少Spring MVC的DispatcherServlet初始化配置

你提供了Spring MVC配置类AppConfiguration和持久化配置类HibernateConfiguration,但没有Web应用初始化类(即AbstractAnnotationConfigDispatcherServletInitializer的实现)。这个类是Spring MVC的入口,负责注册DispatcherServlet并将请求路由到Spring容器,没有它的话,你的REST Controller根本不会被Spring识别和处理。

解决方法:
在com.customer.crm.configuration包下创建WebAppInitializer类:

package com.customer.crm.configuration;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    // 加载根容器配置(如Hibernate等非Web相关逻辑)
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { HibernateConfiguration.class };
    }

    // 加载Servlet容器配置(Spring MVC相关逻辑)
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] { AppConfiguration.class };
    }

    // 指定DispatcherServlet处理所有请求
    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }
}

这个类会替代传统的web.xml,自动完成DispatcherServlet的注册和配置加载,Spring才能扫描到你的Index控制器并处理/api/customer请求。


3. 额外检查点

如果上面两个问题解决后仍出现404,可以补充检查:

  • 确认AppConfiguration的@ComponentScan(basePackages = "com.customer.crm")覆盖了Index控制器所在的com.customer.crm.rest包(这里是没问题的,父包扫描会包含所有子包)。
  • 查看Tomcat启动日志,是否存在类似Mapped "{[/api/customer],methods=[GET]}" onto public com.customer.crm.entity.Customer com.customer.crm.rest.Index.getIndex()的日志,如果没有,说明控制器未被注册,回到配置类检查。
  • 注意Spring 4.0.6与Jackson 2.9.6的兼容性:Spring 4.0.x官方推荐Jackson版本为2.3.x,高版本可能引发序列化问题,但这只会影响返回结果格式,不会导致404,后续若返回JSON异常可考虑降低Jackson版本到2.3.3。

内容的提问来源于stack exchange,提问作者m.y.m

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:26:36