【问题标题】:Zip 2 different Mono in Spring Webfux在 Spring Webflux 中压缩 2 个不同的 Mono
【发布时间】:2021-01-19 19:51:39
【问题描述】:

我有以下功能

public Mono<CarAndShip> getCarAndShip(Long id) {
    Mono<Car> carMono = carService.getCar(id).subscribeOn(Schedulers.elastic());
    Mono<Ship> shipMono = shipService.getShip(id).subscribeOn(Schedulers.elastic());

    return Mono.zip(carMono, shipMono)
        .flatMap(zipMono -> {
            return new CarAndShip(zipMono.getT1(), zipMono.getT2());
        });

IntelliJ 在返回声明中抱怨:

Required type: Mono <CarAndShip> 
Provided: Mono <Object> no
instance(s) of type variable(s) R exist so that CarAndShip conforms to Mono<? extends R>

如何将类型转换为所需的CarAndShip 返回类型?

【问题讨论】:

  • 您的CarAndShip 班级是什么样的?为什么不直接返回Mono&lt;Tuple2&lt;Car, Ship&gt;&gt;

标签: java spring-webflux reactor-netty


【解决方案1】:

必需类型:单声道 提供:单声道 否 类型变量 R 的实例存在,因此 CarAndShip 符合 单声道

正如例外所说:您没有提供 Mono。

所以要么使用map 而不是flatMap

return Mono.zip(carMono, shipMono)
    .map(zipMono -> new CarAndShip(zipMono.getT1(), zipMono.getT2()));

或者提供一个 Mono(这里可能不是最好的方式):

return Mono.zip(carMono, shipMono)
    .flatMap(zipMono -> Mono.just(new CarAndShip(zipMono.getT1(), zipMono.getT2())));

【讨论】:

    【解决方案2】:

    在此示例中,您应该使用 map() 而不是 flatMap(),因为您没有返回 Mono

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-10
      • 2018-09-21
      • 2021-11-09
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 2020-04-30
      相关资源
      最近更新 更多