0

对于我的 API,我正在解析一个对象并使用 lombok 构建器创建我的对象。其中一个变量是 LocalDateTime 类型的“arrivalTime”,当然,它可以为空。

我以前是这样的:

visits.add(visit.builder()
      .arrivalTime(legacyVisit.getArrivalTime() == null ? null :
          LocalDateTime.parse(legacyVisit.getArrivalTime(), ISO_OFFSET_DATE_TIME))

但我正在寻找一种更好的方法,也许使用 vavr 选项?但我遇到了问题。我知道如果它不为空,我将逻辑放入“映射”,如果它为空,则放入“获取”逻辑。但我不能做 get(null)。如果到达时间为空,我想将其保持为空。

visits.add(visit.builder()
      .arrivalTime(Option.of(legacyVisit.getArrivalTime())
          .map(p -> LocalDateTime.parse(p, ISO_OFFSET_DATE_TIME)))

我还尝试将我的对象中的到达时间变量转换为选项,但我只是将对象作为我的 API 中的响应发送,它将它变成如下所示:

    "arrivalTime": {
        "empty": true,
        "lazy": false,
        "singleValued": true,
        "async": false,
        "defined": false,
        "orNull": null
    },

这是非常丑陋的。有任何想法吗?

4

1 回答 1

2

看起来拥有arrivalTime一个Option将是最有表现力和最强大的。您可以轻松地映射您提到的值。

但如前所述,序列化可能需要一些工作。有一些 Vavr 模块可以做到这一点:

  • 当您使用 jackson 作为 JSON 序列化程序库时可以使用的 vavr-jackson
  • 使用 GSON 作为 JSON 序列化程序库时可以使用的 vavr-gson
于 2019-02-27T13:15:19.007 回答