基于Groovy GStringTemplateEngine实现模板循环及空行问题排查
Groovy GStringTemplateEngine:实现循环模板并解决末尾空行问题
一、实现支持循环的模板
首先你需要修改你的模板文件(output.template),利用Groovy模板的脚本块语法来遍历传入的列表数据。模板内容应该写成这样:
env: <% mapping.each { item -> %> - name : ${item.name} value : ${item.value} <% } %>
模板语法说明:
<% ... %>用来包裹Groovy代码逻辑,这里用each遍历mapping列表中的每一项${item.name}和${item.value}用来输出当前遍历项的属性值
配合你提供的Groovy代码,运行后就能生成你想要的输出结构:
def f = new File('output.template') def engine = new groovy.text.GStringTemplateEngine() def mapping = [ [ name : "param1", value : "1"], [ name : "param2", value : "2" ] ] def template = engine.createTemplate(f).make(mapping) println "${template}"
二、关于模板输出末尾的多余空行
这个问题并不是解决方案提供者没考虑到,也不是你本地系统的特殊问题——这是Groovy GStringTemplateEngine的正常行为:它会严格保留模板文件中的所有空白字符(包括换行)。
为什么会出现空行?
你的模板里,循环结束的<% } %>标签后面大概率带有一个换行符,或者循环内部的最后一行(value : ${item.value})后面的换行被保留了,当循环结束后,这个多余的换行就会变成输出末尾的空行。
解决方法
有两种简单的处理方式:
- 调整模板的空白结构:把循环结束标签和最后一行输出放在同一行,避免多余换行:
env: <% mapping.each { item -> %> - name : ${item.name} value : ${item.value}<% } %>
- 渲染后修剪空白:在输出模板内容时调用
trim()方法,直接去掉首尾的空白和空行:
println "${template}".trim()
两种方式都能解决末尾空行的问题,你可以根据自己的模板风格选择合适的方案。
内容的提问来源于stack exchange,提问作者Here_2_learn
相关产品推荐
相关产品推荐

