FreeMarker Java 8可选值支持

时间:2016-12-16 06:49:59

标签: java-8 freemarker optional

FreeMarker是否支持Java 8中的可选值?

e.g。我有String id,它的getter方法如下:

public Optional<String> getId() {
  return Optional.ofNullable(Id);
}

我将如何在.ftl文件中引用它。似乎{data.id}找不到正确的Optional值。但是给了我可选[1334586]

1 个答案:

答案 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()!''}