Groovy模板 - 非标准参数,带有减号

时间:2018-04-05 17:27:30

标签: templates groovy template-engine

我试图渲染包含减号的键的地图(例如first-name)。这是我尝试渲染的示例模板:

String text = "Dear \"$first-name $lastname\",\nSo nice to meet you";

当我使用Groovy模板引擎(可以是SimpleTemplateEngineMarkupTemplateEngine)渲染它时,它会抱怨并抛出异常。当我删除' - '从变量名称,它工作正常。

无论如何都要在Groovy模板文本中转义这些变量吗?

BTW - 我这样做的原因是从第三方API渲染JSON blob。

1 个答案:

答案 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

希望它有所帮助。