You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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都漏了。
修复步骤
  1. 直接删掉启动类上的@ComponentScan("com.tutojwt.test.repository")注解,让Spring Boot走默认的包扫描逻辑,所有业务层、控制层的Bean都会被正常加载。
  2. 针对Repository层的启动报错,加对应持久层的扫描注解即可:
    • 用Spring Data JPA的话:启动类加@EnableJpaRepositories("com.tutojwt.test.repository"),如果实体类报找不到再加@EntityScan("com.tutojwt.test.model")
    • 用MyBatis/MyBatis-Plus的话:启动类加@MapperScan("com.tutojwt.test.repository")
  3. 修正后的启动类参考代码:
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);
    }
}
  1. 重启项目后访问http://localhost:8080/api/users就能正常拿到返回结果了。
补充说明

根路径能访问不代表项目配置正常,那是Spring Boot内置的默认静态页/错误页的响应,和你自定义的Controller无关。启动后可以在开发工具的接口映射列表里检查/api/users路由是否存在,不存在就说明Controller没被扫描到。

内容的提问来源于stack exchange,提问作者ben171

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 11:42:16