当前位置: 首页 > 知识库问答 >
问题:

Spring webflux-多单声道

邢皓
2023-03-14

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

这里有一个REST请求,它附带了一个简单的bean,其中包含一个列表等属性。对此列表进行迭代,以使用返回Mono(findOne)的响应mongo调用。但我不认为我找到了正确的方法:

@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;
    });
}

在我看来,“反应性”的想法并不是必须做一个块,但我没有找到如何做,否则。

有人能帮我找到做这项任务的最佳方法吗?

共有1个答案

令狐弘益
2023-03-14

大致如下:

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

 类似资料:
  • 我的理解是单声道 我说得对吗? 如果没有,单声道之间的区别是什么

  • 我们使用的是Spring数据,当我们调用时,我们收到的是

  • 我是反应编程(spring webflux)的新手,我想知道如何最好地处理这个用例。我有一个返回Mono的反应服务调用(getAccount),我想将它与另一个返回Mono 的服务调用getBooks和一个执行某种转换并返回类似Mono 的最终同步调用转换链接起来,当getAccount或getBooks返回空时,我如何以Mono 的形式链接并返回转换后的数据?这里是我试图做的一个简化版本,作为一

  • 我正在尝试使用SpringBoot2.0和新的reactive webFlux库。我想知道如何将通过无阻塞WebClient进行的两个调用的结果返回给我的Springboot API的调用者。我的代码是: 然而,如果我这样称呼它,我得到的回应是 而不是SearchResponse对象的内容。我觉得我可能错过了一个基本的点,这是如何工作的!我的想法是,因为WebClient没有阻塞,所以我可以向we

  • 获取所有分支 遍历所有并将其添加到 返回,这是我不确定这样做是否正确的地方。但它起作用了 合并所有列表 我只是困惑,这是在我的上下文中使用的正确方式吗?或者有没有什么更好的方法来实现我正在努力做的事情?

  • 给定以下monos: 双: 和: 具有相同的输出: 和之间有什么区别,在这种情况下? 从https://projectreactor.io/docs/core/release/reference/index.html#which-operator: [如果你]有一个序列,但[你]对值不感兴趣,并且[你]想在最后切换到另一个单声道,[使用]。 [如果您]希望通过将发布者从1个Mono和任何源端协调到