【发布时间】: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>类型的字段就足够了。这就是我们在我公司所做的。