Velocity模板字符串拼接问题及UTC时间获取咨询
VTL模板问题解决:字符串拼接与UTC时间获取
一、字符串拼接问题修复
你的代码中${firstname}-${lastname}的写法会让Velocity把减号识别成算术运算符,导致两个字符串被单独解析,最终输出带引号的两个值用减号连接。
两种修复方式:
- 方式1:把拼接内容整体用双引号包裹,让Velocity识别为单个字符串
#set($fullname = "${firstname}-${lastname}")
- 方式2:用字符串连接符
+来拼接各部分
#set($fullname = $firstname + "-" + $lastname)
修正后的完整模板:
#set($firstname = $root.name.firstname) #set($lastname = $root.name.lastname) #set($fullname = "${firstname}-${lastname}") { $h.outputFormat("json") $h.opt("fullname", $fullname, true) }
运行后就能得到期望的"fullname": "John-Doe"。
二、获取当前UTC时间
在Velocity里可以通过两种方式获取UTC时间:
1. 使用Velocity Tools的DateTool(需环境已引入该工具)
# 获取UTC日历实例并格式化 #set($utcCalendar = $date.getUtcCalendar()) #set($utcTime = $date.format("yyyy-MM-dd'T'HH:mm:ss'Z'", $utcCalendar)) # 或者直接调用快捷方法生成格式化后的UTC时间 #set($utcTime = $date.utc("yyyy-MM-dd HH:mm:ss"))
2. 直接调用Java 8+时间API(环境支持Java 8及以上即可)
# 获取当前UTC时刻并按ISO标准格式化 #set($instant = $java.time.Instant.now()) #set($utcTime = $java.time.format.DateTimeFormatter.ISO_INSTANT.format($instant))
如果要把UTC时间加入输出,模板可以改成这样:
#set($firstname = $root.name.firstname) #set($lastname = $root.name.lastname) #set($fullname = "${firstname}-${lastname}") #set($utcNow = $java.time.format.DateTimeFormatter.ISO_INSTANT.format($java.time.Instant.now())) { $h.outputFormat("json") $h.opt("fullname", $fullname, true) $h.opt("utc_time", $utcNow, true) }
内容的提问来源于stack exchange,提问作者potatoProgrammer
相关产品推荐
相关产品推荐

