如何在Thymeleaf的th:block中格式化日期?遇SpEL异常求助
解决Thymeleaf中th:block格式化日期的问题
错误原因分析
- 第一次尝试的异常:
#temporals.format方法仅支持Java 8+的日期/时间对象(如LocalDate、LocalDateTime),但你的invoice.due是字符串类型(直接用<p th:text="${invoice.due}">能正常显示字符串),导致工具类无法调用方法,抛出空上下文对象异常。 - 第二次尝试的错误:在Thymeleaf的EL表达式中,不需要用
|${}|嵌套变量,这属于语法错误,导致表达式解析失败。
正确解决方案
方案1:字符串类型日期转成日期对象后格式化
如果后端传递的invoice.due是字符串(格式为yyyy-MM-dd),先通过#temporals.parse将其转为LocalDate,再进行格式化:
<div class="date">Due Date: <th:block th:text="${#temporals.format(#temporals.parse(invoice.due, 'yyyy-MM-dd'), 'yyyy-MM-dd')}"></th:block> </div>
如果需要修改显示格式,只需替换第二个参数的格式字符串即可(比如'MM/dd/yyyy')。
方案2:后端传递Java 8日期类型(推荐)
将后端invoice.due的类型从String改为LocalDate,此时可直接使用#temporals.format:
<div class="date">Due Date: <th:block th:text="${#temporals.format(invoice.due, 'yyyy-MM-dd')}"></th:block> </div>
Spring Boot项目中,spring-boot-starter-thymeleaf已默认包含Java 8日期处理依赖,无需额外引入。
内容的提问来源于stack exchange,提问作者robert trudel
相关产品推荐
相关产品推荐

