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

Spring 4中类级@RequestMapping搭配@RestController出现404错误求助

解决Spring 4 @RestController类级@RequestMapping导致404的问题

这种情况我之前也碰到过,大概率是DispatcherServlet的映射范围或者Spring组件扫描配置出了问题,咱们一步步来排查解决:

核心排查点1:DispatcherServlet的URL映射配置

你能在去掉类级@RequestMapping后正常访问,说明控制器本身逻辑没问题,但加了/rest前缀后请求根本没到达DispatcherServlet。先检查你的web.xml里的DispatcherServlet配置:

错误示例(仅映射特定路径):

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/users/*</url-pattern> <!-- 只处理/users开头的请求 -->
</servlet-mapping>

这种配置下,/rest/users/1不会被DispatcherServlet接管,直接返回404。

正确配置(让DispatcherServlet处理所有非静态资源请求):

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern> <!-- 关键:映射所有路径 -->
</servlet-mapping>

核心排查点2:Spring组件扫描是否生效

确保你的Spring配置文件(比如spring-dispatcher-servlet.xml)开启了组件扫描,并且覆盖了@RestController所在的包:

<!-- 替换成你自己的控制器包路径 -->
<context:component-scan base-package="com.yourproject.controller"/>
<mvc:annotation-driven/> <!-- 必须开启,启用Spring MVC注解支持 -->

如果组件扫描配置错误,Spring根本找不到你的控制器类,自然无法处理请求。

标准控制器代码示例

给你一个正确的代码参考,确保路径拼接逻辑没问题:

@RestController
@RequestMapping("/rest") // 类级路径前缀
public class UserController {

    // 方法级路径,拼接后完整路径为 /rest/users/{id}
    @GetMapping("/users/{id}")
    public String getUser(@PathVariable Integer id) {
        return "Hello User: " + id;
    }
}

最后验证请求路径

确认你的项目上下文路径是helloWorld(Tomcat部署时的上下文名称),完整请求URL应该是:
http://localhost:8080/helloWorld/rest/users/1
仔细检查有没有拼写错误,比如大小写、多写/漏写斜杠。

如果还是有问题,查看Tomcat启动日志,有没有组件扫描失败、DispatcherServlet初始化报错的信息,这些日志能帮你快速定位隐藏问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:18:01