java.lang.IllegalStateException: block()/blockFirst()/blockL



>我在Spring Webflux中的阻塞操作中出现错误。我检索地址文档列表的单声道,并使用此地址文档的单声道列表来形成街道地址(与街道(如下所示:

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((/blockLast(( are blocking,这在线程 reactor-http-nio-2 中不受支持"。您能否建议如何解决。我想在不阻止它的情况下检索地址响应。此响应将在响应实体中的代码中进一步使用,如下所示:

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

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

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

然后您可以按原样返回它,或将其映射到 Mono> 类型,应用与上面相同的方法。

最新更新