如何使用 WebFlux 获取主对象和子对象

How to fetch main object and sub objects with WebFlux

我正在使用包含块的页面构建内容管理系统。我获取一个带有 id 的页面,然后获取与同一页面 id 关联的块。以阻塞的方式,我会这样做:

Page page = repo.getPageById(47);
page.setBlocks(repo.getBlocksByPageId(47));

当做这个反应时,它是 flatMapszipWith 的一团糟:

Mono<Page> = repo.getPageById(47)
    .flatMap(page -> repo.getBlocksByPageId(47).collectList().zipWith(Mono.just(page)))
    .flatMap(t -> {
      List<Block> blocks = t.getT1();
      Page page = t.getT2();
      page.setBlocks(blocks);
      return Mono.just(page);
    });

您能否推荐实现相同结果的更好方法?

您可以从头压缩 2 个 Mono 并使用 map 而不是 flatMap

Mono<Page> result = repo.getPageById(47)
           .zipWith(repo.getBlocksByPageId(47).collectList())
           .map(t -> {
               Page page = t.getT1();
               page.setBlocks(t.getT2());
               return page;
           });