SpringBoot RestController无法工作,请求返回404问题求助
解决SpringBoot RestController返回404的问题
嘿,我太懂这种排查半天找不到原因的痛苦了!之前我也遇到过几乎一样的情况,给你几个实用的排查方向,应该能帮你解决这个404问题:
先把你的代码整理一下方便查看:
@RestController public class PbxPortalRestControllerSet { @RequestMapping("/testMe") public String testMe() { return "I am alive"; } } @SpringBootApplication public class PbxPortalApplication { public static void main(String[] args) { SpringApplication.run(PbxPortalApplication.class, args); } }
1. 先检查包结构是否符合SpringBoot的扫描规则
SpringBoot默认只会扫描@SpringBootApplication所在包及其子包下的所有组件(包括@RestController)。举个例子:
- 如果你的
PbxPortalApplication在com.example.pbxportal包下,那你的控制器必须放在com.example.pbxportal或者com.example.pbxportal.controller这类子包里才能被扫描到。 - 如果控制器在完全不相关的包(比如
com.another.controller),那Spring根本找不到它!
解决方法:
要么调整你的包结构,把控制器移到启动类的同包或子包下;要么在启动类上手动指定扫描路径:
@SpringBootApplication(scanBasePackages = {"com.yourpackage.controller"}) public class PbxPortalApplication { // ... }
2. 确认访问的URL完全正确
你写的@RequestMapping("/testMe")对应的访问路径是http://localhost:8080/testMe(默认端口是8080),要注意这几个点:
- 有没有在配置文件里设置了上下文路径?比如
application.properties里加了server.servlet.context-path=/pbx,那访问路径就得改成http://localhost:8080/pbx/testMe - 检查URL的拼写,有没有多打/少打字符?虽然Spring默认不区分URL大小写,但最好和注解里的路径完全一致
3. 验证启动类是否正常启动
看看控制台的启动日志:
- 有没有看到SpringBoot的启动成功提示?比如
Started PbxPortalApplication in 2.3 seconds这种日志 - 有没有报错信息?比如依赖缺失、端口被占用之类的异常,这些都会导致控制器无法正常加载
4. 检查Spring Web依赖是否存在
如果你的项目里没有引入Spring Web starter依赖,SpringBoot不会自动配置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'
5. 试试用@GetMapping替代@RequestMapping
虽然@RequestMapping默认支持GET请求,但有时候明确指定请求方法能避免一些隐藏的问题,比如不小心用了POST请求访问这个接口?把注解改成@GetMapping("/testMe")再试试。
按这几个步骤排查下来,应该就能找到问题啦!
内容的提问来源于stack exchange,提问作者Vahe Toomasi
相关产品推荐
相关产品推荐

