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,利用其强大的模板功能实现动态页面渲染。重点掌握集合遍历、条件判断和空值处理,能有效提升开发效率。