【问题标题】:Null check with vavr使用 vavr 进行空检查
【发布时间】:2019-07-21 02:19:43
【问题描述】:

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

我以前是这样的:

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
    },

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

【问题讨论】:

  • 回答具体问题“Keep null if empty”,就像.getOrElseNull()一样简单。所以你会有Option.of(legacyVisit.getArrivalTime()).map(p -> LocalDateTime.parse(p, ISO_OFFSET_DATE_TIME)).getOrElseNull()。但一般来说,当您导入vavr-jackson 时,在您的API 中声明Option<LocalDateTime> 类型的字段就足够了。这就是我们在我公司所做的。

标签: java vavr


【解决方案1】:

看起来让arrivalTime 成为Option 将是最有表现力和最强大的。您可以轻松映射您提到的值。

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

  • vavr-jackson 当您使用 jackson 作为 JSON 序列化程序库时可以使用它
  • vavr-gson 当您使用 GSON 作为 JSON 序列化程序库时可以使用它

【讨论】:

    猜你喜欢
    • 2020-06-10
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2021-12-01
    • 2019-08-07
    相关资源
    最近更新 更多