如何在FreeMarker中使用名称含连字符的变量?
解决FreeMarker渲染带连字符键的Map变量报错问题
嘿,这个问题我太熟悉了!FreeMarker的变量语法默认会把连字符当成减法运算符,所以直接写${first-name}的时候,它会试图计算first减去name,自然就报错了——毕竟你根本没有这两个单独的变量。不过好在有完美的解决方案,完全不需要修改第三方API返回的数据,下面给你两种最实用的方法:
方法一:使用方括号语法访问Map键
这是最直接也最通用的方式,FreeMarker支持通过字符串键来访问Map的元素,不管键里有什么特殊字符。
假设你的第三方JSON数据转成的Map变量名为apiData,那原来的代码:
<head><title>Data - ${first-name} </title>
可以改成:
<head><title>Data - ${apiData['first-name']} </title>
如果这个带连字符的键是顶层变量(没有嵌套在某个Map里),可以用FreeMarker的内置变量.vars来访问:
<head><title>Data - ${.vars['first-name']} </title>
.vars相当于当前上下文的变量容器,通过字符串键就能精准获取到你需要的那个带特殊字符的变量。
方法二:使用get()方法(如果适用)
如果你的数据对象支持get()方法(比如Groovy里的Map其实是支持的),也可以这样写:
<head><title>Data - ${apiData.get('first-name')} </title>
不过这种方法和方括号语法效果差不多,方括号的写法更简洁直观一些。
这两种方法都不需要修改原始的JSON数据,完美适配你无法控制变量名称的场景,赶紧试试吧!
内容的提问来源于stack exchange,提问作者Justin Lawler
相关产品推荐
相关产品推荐

