Spring webflux - 多单声道

Spring webflux - multi Mono

我不知道或问这个问题除了这里,如果不是我道歉的地方。

我目前正在开发一个使用 spring webflux 的应用程序,我在使用 Mono 和 Flux 时遇到了问题。

这里我有一个 REST 请求,它带有一个简单的 bean,其中包含包括列表在内的属性。迭代此列表以使用响应式 mongo 调用 returns 单声道 (findOne)。 但我认为我没有找到正确的方法:

@PostMapping
@RequestMapping("/check")
public Mono<ContactCheckResponse> check(@RequestBody List<ContactCheckRequest> list) {
    final ContactCheckResponse response = new ContactCheckResponse();
    response.setRsnCode("00");
    response.setRspnCode("0000");
    LOG.debug("o--> person - check {} items", list.size());

    final List<ContactCheckResponse.Contact> contacts = new ArrayList<>();
    response.setContacts(contacts);

    return Mono.fromCallable(() -> {
        list.stream().forEach( c -> {
            Boolean exists = contactRespository.findOneByThumbprint(c.getIdentifiant()).block() != null;
            ContactCheckResponse.Contact responseContact = new ContactCheckResponse.Contact();
            responseContact.setExist(exists);
            responseContact.setIdentifiant(c.getIdentifiant());
            responseContact.setRsnCode("00");
            responseContact.setRspnCode("0000");
            response.getContacts().add(responseContact);
        });
        return response;
    });
}

在我看来,必须制作一个块的事实并不在我的想法中"reactive",但我没有找到其他方法。

有人可以帮我找到完成这项任务的最佳方法吗?

谢谢

大致如下:

return Flux.fromIterable(list)
  .flatMap(c -> contactRespository.findOneByThumbprint(c.getIdentifiant())
                  .map(r -> r != null)
                  .map(exists -> {
                         ContactCheckResponse.Contact responseContact = new ContactCheckResponse.Contact();
                         ...
                         return responseContact;
                      })
          )
 .reduce(response, (r,c) -> {
                               response.getContacts().add(responseContact);
                               return response;
         });       

从列表中创建一个 Flux,为每个条目创建一个联系人并将所有内容缩减为 Mono