Spring Webflux非阻塞相关资源调用

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

我正在使用Spring Webflux和Spring Data MongoDB Reactive。在我的REST Controller中,我试图从数据库(MongoDB)中获取所有类型的对象(例如某个品牌的所有自行车)。我当前的实现如下所示:

@GetMapping("/bybrand/{brandId}")
public Flux<Bike> bikesByBrand(@PathVariable(value = "brandId") String brandId) {
    return bikeRepository.findByBrand( //returns a Flux<Bike>
            brandRepository.findById(brandId) //returns a Mono<Brand>
                    .block() //returns a Brand
    );
}

为了保持反应性模式,我想避免block()调用。我尝试了map()和doOnSuccess()的各种组合,但没有找到正确的方法来做自己想做的事情。我在网上找到的示例或教程没有涵盖使用依赖调用数据库的用例。如何避免在此处使用block()以及通过相关的先前调用访问数据库的黄金标准是什么?

我的另一种方法如下。

brandRepository.findById(brandId)
            .doOnSuccess(brand -> bikeRepository.findByBrand(brand));

但是我无法找到一种使用高级方法最终返回lambda函数(自行车的通量)的结果的方法。

java spring spring-webflux project-reactor reactive
1个回答
1
投票

您可以使用flatMapMany

return brandRepository.findById(brandId).flatMapMany(bikeRepository::findByBrand)
© www.soinside.com 2019 - 2024. All rights reserved.