09_Spring Boot 整合 Freemarker 模板引擎的坑

发布于:2025-07-22 ⋅ 阅读:(14) ⋅ 点赞:(0)

09_Spring Boot 整合 Freemarker 模板引擎的坑

1.背景:

springboot 版本:3.0.2

2. 引入依赖

pom.xml 中添加:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- Spring Boot Freemarker 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

3. 配置 freemarker

application.yml 中进行如下配置

spring:
  freemarker:
    cache: false
    charset: UTF-8
    check-template-location: true
    content-type: text/html
    expose-request-attributes: true
    expose-session-attributes: true
    request-context-attribute: request

4. 编写控制层代码

  • 需要使用 @Controller,而非 @RestController
  • @Controller 用于返回视图页面,@RestController 会默认返回 JSON,不适合页面跳转。

示例:

@Controller
public class FreemarkerController {

    @GetMapping("/freemarker")
    public String freemarkerTest(Model model) {
        model.addAttribute("message", "Hello Freemarker!");
        return "freemarker"; // 视图名称,对应模板文件
    }
}

5. 模板文件位置与命名

  • Freemarker模板文件放置于 src/main/resources/templates/ 目录。
  • 即模板文件命名为 freemarker.ftl

目录结构示例:

src
 └─ main
     └─ resources
         └─ templates
             └─ freemarker.ftl

freemarker.ftl 模板内容如下:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>Freemarker</title>
</head>
<body>
</body>
</html>

6. 启动项目

启动后访问地址,并没有想象中的顺利,直接报错了。

第一次报错:404 错误

  • 可能是缓存或项目未正确构建导致。
  • 解决:执行 Maven clean,重新编译打包,再启动。

第二次报错:还是 404 错误

在这里插入图片描述

经过查询才知道,Spring Boot 2.2.0 起,默认模版后缀名为 ftlh

解决方案:
  • 将模板文件后缀由 .ftl 改为 .ftlh
  • 确认模板文件路径和名称与返回视图名一致。

例如:

templates/freemarker.ftlh

控制器返回:

return "freemarker"; // 自动匹配 freemarker.ftlh

templates/freemarker.ftlh

控制器返回:

return "freemarker"; // 自动匹配 freemarker.ftlh

Spring Boot 2.2.0 及以上版本 Freemarker 模板后缀名默认是 .ftlh,而不是传统的 .ftl


网站公告

今日签到

点亮在社区的每一天
去签到