FreeMarker是否支持Java 8中的可选值?
e.g。我有String id,它的getter方法如下:
public Optional<String> getId() {
return Optional.ofNullable(Id);
}
我将如何在.ftl文件中引用它。似乎{data.id}找不到正确的Optional值。但是给了我可选[1334586]
答案 0 :(得分:2)
好吧,Freemarker不应该知道Optional或者最好说它是动态类型的,所以它适用于任何对象。
由于您调用$ {data.id},因此只需在toString
上调用Optional
,这是完全预期的行为。
如果要在模板中处理空值,并且想要使用Optional
,则可以选择设置默认值(如果为null),因此不需要Optional
用法:
Synopsis: unsafe_expr!default_expr or unsafe_expr! or (unsafe_expr)!default_expr or (unsafe_expr)!
Example: ${data.id!"No id."}
或检查它是否存在:
<#if data?? && data.id??>
Id found
<#else>
Id not found
</#if>
有关详细信息,请查看Freemarker docs。具体部分:处理缺失值和缺失值测试操作符。
如果您只想从模板中获取Optional
的值:
${data.id.orElse('')}
或
${data.id.get()!''}