我正在使用Spring Webflux和Spring Data MongoDB Reactive。在我的REST控制器中,我试图从数据库(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函数(Bike的Flux)的结果。
您可以使用flatMapMany
return brandRepository.findById(brandId).flatMapMany(bikeRepository::findByBrand)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句