【问题标题】:How to get Flux-Results into a set of a Mono-Bean如何将 Flux-Results 放入一组 Mono-Bean
【发布时间】:2021-08-02 09:35:49
【问题描述】:

我有以下场景:我有一个 ProductFamily,其中包含一组产品。

我从数据库加载 ProduktFamily,然后我想加载其产品并将它们插入 ProduktFamily.products。

在 Spring MVC 中很容易(因为 JPA),但在使用 Webflux 时我很挣扎。 我试过这个,但它不起作用。 ProduktFamily.products-set 为空。

服务:

public Flux<ProduktfamilyRS> getAllProduktFamilies() {
    return produktfamilyDatabaseFacade.findAll()
        .map(produktfamilyEntity2 -> dtoMapper.produktfamilyEntityToProduktfamilyRS(produktfamilyEntity2)) // <-- Mapsctruct Mapper
        .concatMap(produktfamilyRS -> loadProducts(produktfamilyRS));
  }


private Mono<ProduktfamilieRS> loadProducts(ProduktfamilieRS produktfamilieRS) {
    Flux<ProduktEntity> byProduktfamilieId = produktDatabaseFacade.findByProduktfamilieId(produktfamilieRS.getId());
    Flux<ProduktRS> produktRSFlux = byProduktfamilieId.map(produktEntity -> dtoMapper.produktEntityToProduktRS(produktEntity));

    return Mono.just(produktfamilieRS).map(produktfamilieRS1 -> {
      produktRSFlux.all(produktRS -> produktfamilieRS1.getProdukte().add(produktRS));
      produktRSFlux.subscribe();
      return produktfamilieRS1;
    });
  }

ProduktfamilyDatabaseFacade:

  public Flux<ProduktfamilyEntity> findAll() {
    return produktfamilyRepository.findAll();
  }

ProduktfamilyDatabaseFacade:

 public Flux<ProduktEntity> findByProduktfamilyId(Long produktfamilyId) {
    return produktRepository.findAllByProduktfamilyId(produktfamilyeId)
        .doOnNext(produktEntity -> log.info("Found Produkt '" + produktEntity.getName() + "' für Produktfamilie"));
  }

有没有办法从 Mono 开始,然后遍历 Flux 以将每个 Product 添加到 Productfamily,然后返回 ProductfamilyRS?

谢谢

【问题讨论】:

    标签: spring-webflux spring-data-r2dbc webflux


    【解决方案1】:

    好的,它工作,但不知道它是否是一个好方法。 有人可以评论吗?

      public Flux<ProduktfamilieRS> getAllProduktFamilien() {
        return produktfamilieDatabaseFacade.findAll()
            .map(produktfamilieEntity2 -> dtoMapper.produktfamilieEntityToProduktfamilieRS(produktfamilieEntity2))
            .concatMap(this::loadProdukteFlat);
      }
    
    
      private Mono<ProduktfamilieRS> loadProdukteFlat(ProduktfamilieRS produktfamilieRS) {
        return produktDatabaseFacade.findByProduktfamilieId(produktfamilieRS.getId())
            .doOnNext(produktEntity -> produktfamilieRS.getProdukte().add(dtoMapper.produktEntityToProduktRS(produktEntity)))
            .then(Mono.just(produktfamilieRS));
      }
    
    

    【讨论】:

    • 您可以将所有结果收集到一个列表或映射中,然后迭代列表并将其添加到对象中并返回
    猜你喜欢
    • 2021-09-30
    • 2020-01-28
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 2020-10-04
    • 2017-06-19
    • 2022-08-19
    相关资源
    最近更新 更多