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

非法状态异常: 块()/块第一()/块最后() 是阻塞,这在线程反应器中不受支持

陈瀚玥
2023-03-14

我在Spring Webflow中的阻塞操作出错了。我检索地址文档的Mono列表,并使用此地址文档的Mono列表来形成街道地址(带有Street),如下所示:

Mono<List<Address>> docs = getAddress(id, name);

AddressResponse addrResponse = new AddressResponse.Builder().
                        withStreet(docs.map(doc -> doc.stream().
                                 map(StreetAddress::map).
                                collect(Collectors.toList())).block()).
                        build();

地图方法:

 public static StreetAddress map(Address addr) {
            return new Builder().
                withId(addr.getId()).
                withStreet(addr.getStreetAddress()).
                build();
        }

当我执行上述代码时,它抛出一个“block()/blockFirst()/brockLast()are-blocking,这在线程reactor-http-nio-2中不受支持”。你能建议一下如何修理吗。我想在不阻止它的情况下检索AddressResponse。此响应将进一步用于响应实体中的代码,如下所示:

 return Mono.just(ResponseEntity
                .status(HttpStatus.OK)
                .body(addrResponse)));

共有1个答案

邴俊友
2023-03-14

问题是你试图混合反应式和命令式代码。相反,只需将其映射到反应管道中:

Mono<AddressResponse> response = docs.map(addresses->{
  return new AddressResponse.Builder()
          .withStreet(addresses -> addresses.stream()
                                .map(StreetAddress::map)
                                .collect(Collectors.toList()))
           .build();
})

然后您可以按原样返回它,或将其映射到Mono

 类似资料:
  • 我正在尝试使用WebTest客户端发布数据,但不幸的是,这样的消息被抛出: 为什么会这样?,我不能阻止值,还是邮政编码有问题?我对这种反应式抽象完全陌生,WebTestClient的这种实现使用了非反应式方法。以下是失败的代码: 这里postAndVerify失败: 创建方法的实现如下所示:

  • I使用SpringSpring靴2.1.0。 在其他bean中调用此方法 我需要传递一个字符串值,而不是Mono,当我传递Mono时,答案是空的。 当我试图从Mono获取字符串值时,我得到了一个错误: 如果有人有解决办法,我会很感激

  • 我正在尝试从进行HTTP调用。该调用在post man中工作正常,下面是调用的版本, 但是我试图使用进行相同的调用。 但是,应用程序正在抛出异常, JAVAlang.IllegalStateException:block()/blockFirst()/blockLast()正在阻塞,这在thread reactor-http-nio-3中不受支持 这里出了什么问题?我对反应式编程非常陌生,谷歌对这

  • 我试图添加一个新的块到游戏中,每边都有不同的纹理,它会抛出一个错误异常加载模型的变体。 我有其他具有类似命名约定的块,这些块工作正常,但在所有方面都具有相同的纹理。 游戏中的方块正确显示了“燃烧”和“朝向”状态,但没有显示纹理。

  • 我正在尝试实现线程,其中一个线程生成随机数,而另一个线程等待,一旦它生成随机数,它应该通知并等待另一个线程也这样做。我收到了非法的监控状态异常,请帮我指出我的错误。

  • 我在Spring Webflow中执行阻塞操作时遇到了一个小问题。我检索文章文档列表,并从文章文档列表中,我想更新另一个对象。 当我执行以下操作时,有时它会工作,有时会抛出“block()/block First()/block Last()被阻塞,这在线程reactor-超文本传输协议-nio-2中是不支持的”。你能建议如何修复吗?我真的不想让它阻塞,但不知道如何继续。stackoverflow