You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring WebFlux WebClient如何通过subscribe异步打印字符串响应

问题解答

关于是否Alfresco不支持异步调用的说明

该现象完全和下游服务Alfresco无关,不是它不支持异步调用,是你对subscribe()方法的返回值理解有误:

  • 无参Mono.subscribe()的返回值是Disposable类型的订阅控制对象,你打印的reactor.core.publisher.LambdaSubscriber@77114efe就是这个对象的默认toString结果,本身就不会包含响应内容。
  • block()是阻塞当前线程等待响应流程走完,直接返回Mono发射的结果值,所以能直接拿到JSON字符串。

用subscribe异步打印响应的实现方案

你需要给subscribe()传入响应消费回调函数即可,异步回调会在响应到达时自动执行打印逻辑,示例代码如下:

private void getNodeDetail() {
    Mono<String> mono = webClient.get()
            .uri("/alfresco/api/-default-/public/alfresco/versions/1/nodes/f37b52a8-de40-414b-b64d-a958137e89e2")
            .retrieve().bodyToMono(String.class);

    // 传入回调实现异步处理
    mono.subscribe(
        // 正常响应回调,拿到响应内容后打印
        responseContent -> System.out.println(responseContent),
        // 异常回调,建议加上避免请求出错时异常被静默吞掉
        error -> System.err.println("请求出错:" + error.getMessage())
    );
}

补充注意事项

如果你的程序是本地控制台测试程序,主线程如果在订阅完成后直接退出,可能会看不到打印结果,因为异步请求还没完成进程就已经终止。这种场景可以临时加倒计时锁等待响应返回,正式Web服务环境下不需要额外处理,服务进程会保持运行等待回调触发。


内容的提问来源于stack exchange,提问作者Ajay Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:30:06