我试图渲染包含减号的键的地图(例如first-name
)。这是我尝试渲染的示例模板:
String text = "Dear \"$first-name $lastname\",\nSo nice to meet you";
当我使用Groovy模板引擎(可以是SimpleTemplateEngine
或MarkupTemplateEngine
)渲染它时,它会抱怨并抛出异常。当我删除' - '从变量名称,它工作正常。
无论如何都要在Groovy模板文本中转义这些变量吗?
BTW - 我这样做的原因是从第三方API渲染JSON blob。
答案 0 :(得分:1)
至少有一种方法可以做到这一点。由于您在变量名称中不能使用-
字符的相同原因,它在您的情况下无效。定义如下表达式时:
${first-name}
Groovy将其视为:
${first.minus(name)}
这就是它抛出异常的原因:
Caught: groovy.lang.MissingPropertyException: No such property: first for class: SimpleTemplateScript1
groovy.lang.MissingPropertyException: No such property: first for class: SimpleTemplateScript1
at SimpleTemplateScript1.run(SimpleTemplateScript1.groovy:1)
您可以在绑定中保留first-name
等密钥,但必须将它们放在地图中,这样您才能使用first-name
功能访问Map.get(key)
值。请考虑以下示例:
import groovy.text.SimpleTemplateEngine
def engine = new SimpleTemplateEngine()
def bindings = [
'first-name': 'Test',
'lastname': 'qwe'
]
String text = 'Dear "${map["first-name"]} ${map["lastname"]}",\nSo nice to meet you'
println engine.createTemplate(text).make([map: bindings])
在此示例中,我将绑定放入带有键map
的地图中。当我这样做时,我可以map['first-name']
和map['lastname']
访问我的绑定。运行此示例会生成预期输出:
Dear "Test qwe",
So nice to meet you
希望它有所帮助。