Spring Boot @RequestMapping配置/api路径访问返回404错误
问题根因
接口404完全是@ComponentScan配置写错导致的:
@SpringBootApplication默认会扫描启动类所在的com.tutojwt.test包及所有子包下的@RestController、@Service、@Component等Bean,不需要额外配置@ComponentScan。- 你手动写了
@ComponentScan("com.tutojwt.test.repository")之后,默认扫描规则被直接覆盖,Spring只会扫repository这一个包,你放在api包下的UserController、service包下的UserService根本没被注册到容器里,访问当然404。 - 你之前觉得不加这个注解项目启动报错,是搞混了两类扫描逻辑:如果你的Repository是JPA/MyBatis的持久层接口,本来就不是靠
@ComponentScan扫的,要靠对应框架的专用扫描注解,之前你歪打正着用@ComponentScan扫到了Repository,但把其他所有业务Bean都漏了。
修复步骤
- 直接删掉启动类上的
@ComponentScan("com.tutojwt.test.repository")注解,让Spring Boot走默认的包扫描逻辑,所有业务层、控制层的Bean都会被正常加载。 - 针对Repository层的启动报错,加对应持久层的扫描注解即可:
- 用Spring Data JPA的话:启动类加
@EnableJpaRepositories("com.tutojwt.test.repository"),如果实体类报找不到再加@EntityScan("com.tutojwt.test.model") - 用MyBatis/MyBatis-Plus的话:启动类加
@MapperScan("com.tutojwt.test.repository")
- 用Spring Data JPA的话:启动类加
- 修正后的启动类参考代码:
package com.tutojwt.test; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; // JPA场景导入 // import org.springframework.boot.autoconfigure.domain.EntityScan; // import org.springframework.data.jpa.repository.config.EnableJpaRepositories; // MyBatis场景导入 // import org.mybatis.spring.annotation.MapperScan; @SpringBootApplication // JPA场景放开下面两行 // @EnableJpaRepositories("com.tutojwt.test.repository") // @EntityScan("com.tutojwt.test.model") // MyBatis场景放开下面一行 // @MapperScan("com.tutojwt.test.repository") public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); } }
- 重启项目后访问
http://localhost:8080/api/users就能正常拿到返回结果了。
补充说明
根路径能访问不代表项目配置正常,那是Spring Boot内置的默认静态页/错误页的响应,和你自定义的Controller无关。启动后可以在开发工具的接口映射列表里检查/api/users路由是否存在,不存在就说明Controller没被扫描到。
内容的提问来源于stack exchange,提问作者ben171
相关产品推荐
相关产品推荐

