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

我曾经有过这样的事情:

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


但是我正在寻找一种更好的方法,也许使用vavr选项?但是我遇到了问题。我了解,如果逻辑不为空,则将其放入“映射”逻辑;如果逻辑为空,则将其放入“获取”逻辑。但是我不能做get(null)。如果到达时间为null,我想将其保留为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
    },


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

最佳答案

看来让arrivalTime成为Option是最具表现力和功能的。您可以轻松地映射您提到的值。

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


vavr-jackson在将jackson用作JSON序列化程序库时可以使用
vavr-gson在将GSON用作JSON序列化程序库时可以使用

07-28 00:52