Spring Boot应用异常排查:Bean未找到与404白标错误
首先咱们先理清为啥Spring找不到你的NotesRepository Bean。你给仓库接口加了@Repository注解,但Spring Data MongoDB的仓库接口需要额外的注解触发扫描——@EnableMongoRepositories,这是关键遗漏点。
你当前主类只加了@SpringBootApplication和自定义的@ComponentScan,但@ComponentScan只会扫描带@Component、@Service、@Controller这类注解的普通类,不会识别MongoRepository接口。具体解决步骤:
- 删掉主类上自定义的
@ComponentScan,因为@SpringBootApplication已经默认包含了对主类所在包及其子包的组件扫描,你的所有类都在com.demo的子包下,完全不需要额外配置。 - 在主类上添加
@EnableMongoRepositories注解,如果NotesRepository在com.demo.models包下,直接加就行(默认扫描主类所在包下的仓库),也可以明确指定包路径:
@SpringBootApplication @EnableMongoRepositories(basePackages = "com.demo.models") public class MainJavaApplication { public static void main(String[] args) { SpringApplication.run(MainJavaApplication.class, args); } }
这样Spring就能自动识别你的NotesRepository并创建对应的Bean了。
另外你提到官方提示的是learnk8s.io.demo.models,这应该是复制时的笔误,以你实际的com.demo.models包路径为准即可。
应用启动成功但访问localhost:8080返回404,说明Spring能找到你的控制器,但无法匹配到返回的index视图,咱们从这几个方向排查:
1. 检查模板文件位置(若用Thymeleaf等模板引擎)
你的控制器返回"index",如果用的是Thymeleaf(Spring Boot默认推荐的模板引擎),必须把index.html放在**src/main/resources/templates**目录下。如果文件放错位置(比如static目录或项目根目录),Spring会找不到视图从而返回404。
2. 确认模板引擎依赖是否存在
如果用Thymeleaf,检查你的pom.xml(Maven)或build.gradle(Gradle)里有没有引入对应的starter依赖:
Maven示例:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
没有这个依赖的话,Spring无法解析模板文件,哪怕位置正确也会返回404。
3. 验证控制器映射是否生效
你控制器里的@GetMapping("/")写法是对的,可以查看启动日志,确认有没有类似Mapped "{[/],methods=[GET]}"的日志,这说明该映射已被Spring成功注册。如果没有这条日志,才需要检查控制器是否被扫描到,但你说应用启动成功,大概率不是这个问题。
4. 若不用模板引擎,检查静态资源位置
如果直接用静态HTML,不需要模板引擎,就要把index.html放在**src/main/resources/static**或src/main/resources/public目录下,Spring会自动把这个路径映射到/访问地址。
- 完全正确!如果所有类都在主应用类所在包的子包下,根本不需要额外的
@ComponentScan,@SpringBootApplication已经帮你完成了组件扫描工作。你之前加的自定义@ComponentScan不仅多余,还可能因为配置细节导致潜在问题,删掉更简洁。 - 你之前加了
@ComponentScan包含com.demo.models但无效,核心原因就是缺少@EnableMongoRepositories——@ComponentScan不负责处理Spring Data的仓库接口,必须用专门的注解触发扫描。
按照上面的步骤调整后,应该就能解决这两个问题啦!
内容的提问来源于stack exchange,提问作者JohnDoeDeer

