我试图用反应式程序来解决的问题之一是没有适当地处理结果。
假设我有一个API,可以选择检索用户的最新订单。我想离开的行为,如果没有用户找到呼叫者。在普通的旧Java中,我会写类似的东西:
Optional<Order> getLatestOrder(int userId) { ... }
在webflux中,如果等效函数应返回Mono<Optional<Order>>
或Mono<Order>
,我想尽力而为。
如果我将getLatestOrder()
添加到反应流中,则在发出空单声道时可能会停止。做这样的事情也感觉很奇怪:
getLatestOrder().defaultIfEmpty(new Order());
因为现在感觉就像一个哨兵值,表示它不存在。
是否有使用Mono
和Optional
的模式指南?当您真的不想表达某些内容时,是否有适当的方法可以完全抛弃Optional
?
答案 0 :(得分:0)
我开始在一个小型项目中使用webflux,我们遇到了同样的问题。我们决定退回Mono<Order>
然后,大多数时候我们会使用switchIfEmpty(Mono<? extends T> alternate)
引发错误或使用其他方法恢复
在我们的用例中,switchIfEmpty()
和defaultIfEmpty()
为我们提供了足够的控制权来处理空结果。