深色模式
4.14 数据转换/格式化
Thymeleaf 为变量表达式(${...})和选择表达式(*{...})定义了双大括号语法(${{...}}/*{{...}}),允许通过配置的转换服务(Conversion Service) 对数据进行转换或格式化。
最基础的使用方式如下:
html
<!-- 对 user.lastAccessDate 执行格式化转换后渲染 -->
<td th:text="${{user.lastAccessDate}}">2026-01-16 10:00:00</td>注意到这里的双层大括号了吗:${{...}}。这种写法会指示 Thymeleaf 将 user.lastAccessDate 表达式的结果传递给转换服务,并要求转换服务在输出结果之前执行格式化操作(将其转换为字符串)。
假设 user.lastAccessDate 的类型为 java.util.Calendar,那么只要已注册了转换服务(IStandardConversionService 的实现类),且该服务中包含从 Calendar 到 String 的有效转换规则,此转换就会生效。
IStandardConversionService 的默认实现类(即 StandardConversionService 类)在将任意对象转换为字符串时,仅会调用该对象的 .toString() 方法。如需了解如何注册自定义的转换服务实现类,可参考 “配置进阶”章节。
INFO
官方的 thymeleaf-spring3/thymeleaf-spring4 集成包,会将 Thymeleaf 的转换服务机制与 Spring 自身的 ConversionService 无缝整合。你在 Spring 配置中声明的转换服务(ConversionService)、格式化器(Formatter)会自动对 ${{...}}/*{{...}} 生效。
- 例如配置了
DateFormatter后,${{user.lastAccessDate}}会直接按你定义的格式(如yyyy-MM-dd HH:mm:ss)输出,无需手动调用#dates.format()。
关键注意事项
双大括号 vs 工具对象:
- 双大括号是“通用化”的格式化方式,依赖全局配置的转换服务,适合统一格式规范;
#dates/#temporals等工具对象是“手动”格式化方式,适合临时调整格式;- 示例对比:html
<!-- 方式1:双大括号(依赖 Spring 转换服务,自动按配置格式输出) --> <td th:text="${{user.lastAccessDate}}">2026-01-16</td> <!-- 方式2:工具对象(手动指定格式) --> <td th:text="${#temporals.format(user.lastAccessDate, 'yyyy-MM-dd')}">2026-01-16</td>
自定义转换服务: 若未使用 Spring 集成包,需手动注册自定义
IStandardConversionService实现(参考 Thymeleaf 官方文档的「More on Configuration」章节),才能让双大括号实现自定义格式化。选择表达式的双大括号: 选择表达式也支持双大括号,用法与变量表达式一致:
html<div th:object="${user}"> <!-- 对选中对象的 lastAccessDate 执行格式化 --> <td th:text="*{{lastAccessDate}}">2026-01-16</td> </div>
总结
- 双大括号
${{...}}/*{{...}}是 Thymeleaf 基于转换服务的通用数据格式化语法,核心是将表达式结果交给转换服务处理后再渲染; - 默认转换服务仅调用
.toString(),实际开发中需结合 Spring 集成包,复用 Spring 的ConversionService/Formatter实现自定义格式化; - 双大括号适合统一格式规范,
#dates/#temporals等工具对象适合临时格式调整,可根据场景选择使用。
