IDEA中Spring Boot项目报错:There was an unexpected error (type=Not Found, status=404)

本文深入解析SpringBoot项目中出现404错误的根本原因,即主配置类与Controller类不在同一包下导致的扫描问题,并提供解决策略。
  • 【版权所有,文章允许转载,但须以链接方式注明源地址,否则追究法律责任】
  • 【创作不易,点个赞就是对我最大的支持】

前言

仅作为学习笔记,供大家参考
总结的不错的话,记得点赞收藏关注哦!

报错信息

在这里插入图片描述
报这个错的原因是SpringBoot主配置类(@SpringBootApplication注解标注的类)的所在包和你的Controller类不在同一个包下,如图:
在这里插入图片描述
原因是主配置类所在包及下面所有子包里面的所有组件都会自动帮你扫描到Spring容器中,所以你不放在同一包下他就不会去扫描,那自然就报404了!

创作不易,点个赞就是对我最大的支持~


wxgzh:程序员温眉

优快云:程序员温眉

每天进步一点点的程序员

在前端开发中出现 'There was an unexpected error (type=Not Found, status=404)' 错误,可采用以下解决办法: ### 检查后端请求路径 确保前端发送的请求路径与后端控制器的映射路径一致。例如,在 Spring Boot 中,若后端有如下控制器: ```java import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/hello") public String hello() { return "Hello, World!"; } } ``` 前端请求路径就应为 `/hello`,否则会出现 404 错误。 ### 创建自定义错误处理控制器 可以在后端创建一个自定义的错误处理控制器,为 `/error` 路径提供显式映射。示例如下: ```java import org.springframework.boot.web.servlet.error.ErrorController; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; @RestController public class CustomErrorController implements ErrorController { @RequestMapping("/error") public ResponseEntity<String> handleError(HttpServletRequest request) { Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code"); Exception exception = (Exception) request.getAttribute("javax.servlet.error.exception"); if (statusCode == HttpStatus.NOT_FOUND.value()) { return new ResponseEntity<>("Resource not found", HttpStatus.NOT_FOUND); } else { return new ResponseEntity<>("An unexpected error occurred", HttpStatus.INTERNAL_SERVER_ERROR); } } @Override public String getErrorPath() { return "/error"; } } ``` ### 检查静态资源路径 如果请求的是静态资源(如 HTML、CSS、JavaScript 文件),确保这些资源位于正确的目录下。在 Spring Boot 中,默认的静态资源目录是 `src/main/resources/static`。前端引用这些资源时,路径要正确。例如,在 HTML 文件中引用 CSS 文件: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>My Page</title> <link rel="stylesheet" href="/css/style.css"> </head> <body> <!-- Page content --> </body> </html> ``` 确保 `style.css` 文件位于 `src/main/resources/static/css` 目录下。 ### 检查配置文件 确保 `application.properties` 或 `application.yml` 配置文件中没有错误的配置,特别是与服务器端口、上下文路径等相关的配置。例如,若设置了上下文路径: ```properties server.servlet.context-path=/myapp ``` 前端请求路径就需要加上 `/myapp`。 ### 检查依赖 确保项目的依赖没有冲突或缺失。可以尝试清理并重新构建项目,以确保所有依赖都正确下载和配置。可添加如下依赖: ```xml <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency> ``` ### 调试日志 启用 Spring Boot 的调试日志,查看详细的错误信息。在 `application.properties` 中添加以下配置: ```properties logging.level.org.springframework.web=DEBUG ``` 或者在 `application.yml` 中添加: ```yaml logging: level: org.springframework.web: DEBUG ``` ### 检查 Controller 类位置 确保 Controller 类在 Spring Boot 启动类的同级目录或者子目录下,因为 Spring Boot 默认扫描的范围为本包及子包。`@SpringBootApplication` 注解其实是三个注解的整合,其中 `@ComponentScan` 指定默认扫描包的路径为启动类本包及子包。若需要指定其他扫描路径,可如下配置: ```java @SpringBootApplication @ComponentScan("com.baotademo") @MapperScan("com.baotademo.mapper") public class TestdemoApplication { public static void main(String[] args) { SpringApplication.run(TestdemoApplication.class, args); } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值