我正在使用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函数(自行车的通量)的结果的方法。
您可以使用flatMapMany
return brandRepository.findById(brandId).flatMapMany(bikeRepository::findByBrand)