对于我的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序列化程序库时可以使用