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
相关产品推荐
相关产品推荐

