java-8 - FreeMarker Java 8 可选值支持

标签 java-8 freemarker option-type

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/

相关文章:

java - 在客户端/用户时区的电子邮件内容/正文中显示日期/时间/小时

regex - 匹配带有可选字符的字符串

swift - 函数抛出并返回可选的.. 可以有条件地在一行中解包吗?

java - 解决 Thymeleaf 缺乏可选支持的问题

java - 一个状态对象的一个​​生产者多个消费者

java - 如何使用 DateTimeFormatter 解析非标准月份名称

java - 混淆 Java 泛型错误与 Map 和 Collector

Java 默认方法比相同的代码慢,但在抽象类中

java - Freemarker如何按顺序访问下一个元素

java - Freemarker 迭代映射列表中的 HashMap