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

Spring应用中Get方法返回HTML页面失败(404白标错误)排查

嘿,我之前从Spring MVC转Spring Boot的时候也踩过这个404的坑,咱们一步步来捋清楚问题出在哪~

先搞懂Spring Boot对HTML文件的处理逻辑

Spring Boot对HTML资源的处理分两种场景,咱们先对应你的需求来排查:

场景1:直接返回静态HTML文件(不需要模板渲染)

如果你的HTML是纯静态页面,不需要动态数据填充,那得注意这几点:

  • 文件位置要对:Spring Boot默认会从这几个目录加载静态资源:
    • src/main/resources/static(最常用)
    • src/main/resources/public
    • src/main/resources/resources
    • src/main/resources/META-INF/resources
      把你的HTML文件放到上面任意一个目录里,比如把index.html放在static下,直接访问http://localhost:8080/index.html就能打开,甚至不需要写控制器。
  • 如果要通过控制器跳转:控制器方法得用forward:或者redirect:前缀,比如:
@GetMapping("/goIndex")
public String goIndex() {
    // forward是服务器内部跳转,redirect是客户端重定向,选适合的就行
    return "forward:/index.html";
}

场景2:用模板引擎渲染HTML(类似之前JSP的动态页面)

如果你需要像JSP那样给HTML填充动态数据,那得用模板引擎(比如Thymeleaf,Spring Boot官方推荐),步骤如下:

  1. 引入模板引擎依赖(以Maven为例),在pom.xml里加:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
  1. 放对文件位置:把HTML文件放到src/main/resources/templates目录下,比如user.html。
  2. 控制器写法:直接返回文件名(不需要加后缀),比如:
@Controller // 注意别写成@RestController!
public class UserController {
    @GetMapping("/user")
    public String userPage(Model model) {
        model.addAttribute("username", "张三");
        return "user"; // 自动匹配templates/user.html
    }
}

最容易踩的几个坑

  • 别搞混@Controller和@RestController:@RestController会把返回值直接序列化成JSON,不会跳转视图,这是很多人刚转Spring Boot时犯的错!
  • 包扫描要正确:Spring Boot启动类的包要包含控制器所在的包,比如启动类在com.example.demo,控制器就得在com.example.demo.controller或者子包下;如果不在,要在启动类上加@ComponentScan(basePackages = "你的控制器包路径")。
  • 清理旧的JSP配置:如果你之前配置过JSP的视图解析器(比如spring.mvc.view.prefix和spring.mvc.view.suffix),现在要删掉这些配置,不然会干扰HTML视图的解析。

按照上面的步骤排查,应该就能解决这个白标404错误啦!

内容的提问来源于stack exchange,提问作者Олег Михайлов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:58:49