FreeMarker 支持 Java 8 中的可选值吗?
例如我有 String id,它的 getter 方法如下:
public Optional<String> getId() {
return Optional.ofNullable(Id);
}
我如何在 .ftl 文件中引用它。看来 {data.id} 找不到正确的可选值。但给了我可选[1334586]
最佳答案
嗯,Freemarker 不应该知道Optional,或者最好说它是动态类型的,因此它适用于任何对象。
由于您调用 ${data.id},它只是在 Optional
上调用 toString
,这完全是预期的行为。
如果您想在模板中处理空值,并为此使用可选
,您可以选择设置默认值(如果为空),因此可选
用法不需要:
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()!''}
关于java-8 - FreeMarker Java 8 可选值支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41178775/