一起使用Mono和Optional

时间:2018-12-13 23:11:58

标签: java reactive-programming spring-webflux

我试图用反应式程序来解决的问题之一是没有适当地处理结果。

假设我有一个API,可以选择检索用户的最新订单。我想离开的行为,如果没有用户找到呼叫者。在普通的旧Java中,我会写类似的东西:

Optional<Order> getLatestOrder(int userId) { ... }

在webflux中,如果等效函数应返回Mono<Optional<Order>>Mono<Order>,我想尽力而为。

如果我将getLatestOrder()添加到反应流中,则在发出空单声道时可能会停止。做这样的事情也感觉很奇怪:

getLatestOrder().defaultIfEmpty(new Order());

因为现在感觉就像一个哨兵值,表示它不存在。

是否有使用MonoOptional的模式指南?当您真的不想表达某些内容时,是否有适当的方法可以完全抛弃Optional

1 个答案:

答案 0 :(得分:0)

我开始在一个小型项目中使用webflux,我们遇到了同样的问题。我们决定退回Mono<Order> 然后,大多数时候我们会使用switchIfEmpty(Mono<? extends T> alternate)引发错误或使用其他方法恢复

在我们的用例中,switchIfEmpty()defaultIfEmpty()为我们提供了足够的控制权来处理空结果。

参考指南中的示例:https://projectreactor.io/docs/core/release/reference/index.html#_checking_the_execution_path_with_code_publisherprobe_code