Spring Boot新增RestController类无法访问,请求排查帮助
排查Spring Boot MovieController访问白标错误的步骤
1. 确认主类的组件扫描配置
主类MoviesApplication必须添加@SpringBootApplication注解——它默认会扫描主类所在包及其子包的所有Spring组件。如果主类手动指定了@ComponentScan且范围排除了当前包,或者没加@SpringBootApplication,会导致MovieController无法被Spring注册。
正确的主类示例:
@SpringBootApplication @RestController public class MoviesApplication { public static void main(String[] args) { SpringApplication.run(MoviesApplication.class, args); } @GetMapping("/") public String home() { return "Hello from main controller"; } }
2. 检查MovieController代码正确性
确保@GetMapping的路径匹配正确,且方法为public(Spring仅暴露public方法作为接口端点):
@RestController @RequestMapping("/api/v1/movies") public class MovieController { // 无参数的@GetMapping会匹配"/api/v1/movies" @GetMapping public String getAllMovies() { return "All Movies"; } }
注意:如果写@GetMapping("/"),则匹配的是/api/v1/movies/,此时访问/api/v1/movies可能因路径不匹配返回404。
3. 查看启动日志验证端点注册
启动应用时,检查控制台日志是否存在类似Mapped "{[/api/v1/movies],methods=[GET]}"的条目:
- 无此条目:说明Controller未被注册,回到第一步检查组件扫描范围
- 有此条目:说明端点已注册,需排查以下情况:
- 检查
application.properties/application.yml是否设置了上下文路径(如server.servlet.context-path=/app),此时访问路径应为localhost:8080/app/api/v1/movies - 排查是否有自定义拦截器/过滤器拦截了
/api/v1/movies路径,导致请求无法到达Controller
- 检查
4. 确认Web依赖完整性
确保项目依赖中包含Spring Web starter:
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'
缺少该依赖会导致Spring无法配置Web相关组件,Controller端点无法生效。
5. 清理重建项目
IDE缓存可能导致类未正确编译,执行以下命令后重启应用:
- Maven:
mvn clean install - Gradle:
gradle clean build
内容的提问来源于stack exchange,提问作者Rizwan Shaikh
相关产品推荐
相关产品推荐

