Spring项目中访问@RequestMapping定义的URL出现404如何解决?
针对你遇到的/api/user GET请求返回404的问题,按以下步骤逐一排查:
确认控制器组件被Spring扫描到
检查带@SpringBootApplication注解的项目主类所在包,确保UserApiController所在的包是主类包的子包,或者在主类上通过@ComponentScan显式指定控制器所在的包路径。如果控制器不在默认扫描范围内,Spring不会注册这个控制器的映射。验证控制器注解正确性
确保UserApiController类上标注的是@RestController(如果用@Controller,需要给getUsers()方法额外加@ResponseBody),同时所有请求注解(@RequestMapping、@GetMapping)都来自org.springframework.web.bind.annotation包,没有拼写错误。查看启动日志中的映射注册信息
启动项目时,在控制台日志里查找类似Mapped "{[/api/user],methods=[GET]}"的条目,如果找不到这条日志,说明该请求路径根本没被Spring注册,回到组件扫描或注解配置的问题上。核对服务器端口
确认项目实际启动的端口是8080,查看启动日志里的Tomcat started on port(s): XXXX (http)信息,避免因application.properties/application.yml中配置了其他端口导致访问路径错误。检查Web依赖是否齐全
确保项目已引入Spring Web Starter依赖,没有这个依赖的话,Spring不会启动Web服务:
Maven配置(pom.xml):<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>Gradle配置(build.gradle):
implementation 'org.springframework.boot:spring-boot-starter-web'排查拦截器/过滤器的影响
如果项目中有自定义拦截器或过滤器,可能会拦截/api/user请求,暂时禁用这些组件后测试请求是否正常,以此排查是否是拦截逻辑导致的404。
内容的提问来源于stack exchange,提问作者Gaetan L.

