在 Reactor switchIfEmpty 上抛出异常之前从数据库读取消息

问题描述 投票:0回答:1

我们正在使用 webflux,当找不到对象时我需要抛出错误。

我们有一个错误代码 ENTITY_NOT_FOUND,我们需要抛出一个 MyException() 以及错误代码的消息,我们需要从数据库中读取该消息 该存储库是 ReactiveCrudRepository。因此它返回一个 Mono,我们通过 map() 处理它并填充或翻译,然后返回一个 Mono,这是错误消息的最终形式。 从 switchIfEmpty 步骤中,我们尝试抛出使用此错误消息创建的 MyException


Mono.just(new MyEntity())
switchIfEmpty(Mono.error(new MyException())
.flatMap(...)

上面的代码块有效

private Mono<MyException> generateException(){...}

Mono.just(new MyEntity())
switchIfEmpty(generateException())
.flatMap(...)

对于上面的代码块,switchIfEmpty 抱怨如下

Required type: Mono<? extends MyEntity>
Provided:      Mono<MyException>

一个项目中同时拥有JPA和Reactive仓库确实很麻烦。所以我试图通过反应性存储库来完成这件事

generics spring-webflux project-reactor
1个回答
0
投票

您可以将generateException()重构为:

    private Mono<MyEntity> generateException() {
      return Mono.error(new MyException());
    }
    
© www.soinside.com 2019 - 2024. All rights reserved.