开发基于Spring Boot的应用程序过程中,springboot正常启动但打开页面遇到404错误。
原因分析与解决方案
原因一:控制器未被Spring容器扫描到
症状描述:
- 启动应用时无明显错误提示,但尝试访问特定URL时收到404错误。
原理:
声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描
·@ComponentScan注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解 ·@SpringBootApplication中,默认扫描的范围是启动类所在包及其子包。
解决方案:
- 检查启动类位置:确保启动类位于项目的适当目录结构内,如
src/main/java/com.example
而非根目录下。 - 调整@ComponentScan范围:默认情况下,Spring Boot只会扫描启动类所在包及其子包。若控制器位于不同包中,需在启动类上显式添加
@ComponentScan("com.example")
来明确扫描范围。
@SpringBootApplication
@ComponentScan("com.example")
public class Application {
...
}
原因二:响应体设置不当
症状描述:
- 控制器方法已正确实现,但在试图获取其输出结果时仍显示404错误。
解决方案:
- 使用@ResponseBody:对于希望直接返回数据而非跳转至HTML页面的情况,应在控制器方法前添加
@ResponseBody
注解。 - 考虑@RestController:此注解可同时替代
@Controller
和@ResponseBody
,适用于所有方法都期望以这种方式工作的场景。
@RestController
@RequestMapping("/api")
public class MyController {
@GetMapping("/data")
public String getData() {
return "Your data here";
}
}
原因三:部署方式影响
症状描述:
- 应用程序被打包成WAR文件并在Tomcat服务器上部署时,访问某些端点时会出现404错误。
解决方案:
- 重写configure方法:在启动类中重写
configure
方法,确保应用程序能够正确初始化。
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
- 调整POM文件:如果计划在外部Tomcat服务器上部署,应修改Maven POM文件,将
spring-boot-starter-tomcat
的依赖范围设为provided
。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
参考:spring boot正常启动之后访问controller下接口报404的解决方案_springboot 配置好controller 后访问无法访问-CSDN博客
版权归原作者 旧故新长 所有, 如有侵权,请联系我们删除。