FreeMarker基础语法 在 Spring Boot 中的使用详解
FreeMarker 是一款以 简洁性 和 灵活性 见长的模板引擎,尤其适合需要动态生成文本但追求逻辑与展示分离的场景。其清晰的语法、强大的数据驱动能力,使其成为 Java 生态中广泛使用的工具。选择时需权衡项目需求:若需高度交互的现代 Web 应用,可考虑结合前端框架;若侧重服务端渲染或代码生成,FreeMarker 仍是经典选择。

1. 导入依赖
在 pom.xml 中添加 Spring Boot 官方提供的 FreeMarker Starter 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
Spring Boot 会自动管理版本,无需手动指定。
2. 配置文件(application.yml)
在 src/main/resources/application.yml 中配置 FreeMarker:
spring:
freemarker:
template-loader-path: classpath:/templates/ # 模板存放路径
cache: false # 开发时关闭缓存,修改模板后立即生效
charset: UTF-8
check-template-location: true
suffix: .ftl # 模板文件后缀
content-type: text/html

3. 简单例子
步骤 1:创建 Controller
@Controller
public class DemoController {
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("name", "World");
return "hello"; // 对应 templates/hello.ftl
}
}
步骤 2:创建模板文件 hello.ftl
<!DOCTYPE html>
<html>
<head>
<title>FreeMarker Demo</title>
</head>
<body>
<h1>Hello, ${name}!</h1>
</body>
</html>
访问 http://localhost:8080/hello 会渲染出 Hello, World!。
4. 基本语法
-
插值表达式:
${variable}
输出变量值,如${user.age}。 -
定义变量:
<#assign price = 100> Price: ${price} -
注释:
<#-- 这是注释,不会输出 -->
5. 集合指令 <#list>
遍历集合(List、数组等):
<#list users as user>
Index: ${user_index} <#-- 内置索引(从0开始) -->
Name: ${user.name}
<#if user_has_next>, </#if> <#-- 判断是否是最后一个元素 -->
</#list>
Controller 数据准备:
model.addAttribute("users", List.of(
new User("Alice"),
new User("Bob")
));
6. if 指令
条件判断:
<#if user.age < 18>
未成年
<#elseif user.age == 18>
刚成年
<#else>
成年人
</#if>
7. 运算符
- 算术运算符:
+,-,*,/,% - 比较运算符:
==,!=,>,>=,<,<= - 逻辑运算符:
&&,||,! - 空值处理运算符:
!:默认值,如${name!"Anonymous"}(若name为空,显示 “Anonymous”)。??:判断变量是否存在,如<#if name??>...
8. 空值处理
避免因变量为 null 导致渲染错误:
-
默认值:
${user.address!"No address"} -
安全判断:
<#if user.address??> Address: ${user.address} <#else> Address not provided. </#if>
9. 内建函数
FreeMarker 提供丰富的内置函数,通过 ? 调用:
-
字符串处理:
${"hello"?upper_case} <#-- 输出 "HELLO" --> ${"Hello"?lower_case?cap_first} <#-- 输出 "hello" → "Hello" --> -
日期格式化:
${now?string("yyyy-MM-dd HH:mm:ss")} -
集合操作:
${users?size} <#-- 集合长度 --> ${users?join(", ")} <#-- 将集合元素拼接为字符串 --> -
数值处理:
${price?string.currency} <#-- 格式化为货币,如 "$100.00" -->
总结
通过上述步骤,你可以在 Spring Boot 中快速集成 FreeMarker,利用其强大的模板功能实现动态页面渲染。重点掌握集合遍历、条件判断和空值处理,能有效提升开发效率。
2344

被折叠的 条评论
为什么被折叠?



