【问题标题】:Spring WebFlux - How to print response as String instead of object using WebClientSpring WebFlux - 如何使用 WebClient 将响应打印为字符串而不是对象
【发布时间】:2021-11-20 21:46:43
【问题描述】:

我有一个像下面这样的 Mono:

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

        System.out.println(mono.subscribe());
        System.out.println(mono.block());
    }

问题:第一个 sysout 向我显示 reactor.core.publisher.LambdaSubscriber@77114efe,而使用 block() 它向我显示了我需要的内容(json 字符串)。但我想使用 Aysnc 方法。那么,如上所述,这是否意味着我的目标系统(在这种情况下为 Alfresco)不支持异步调用?如果不是这种情况,我如何使用subscribe() 在控制台上以字符串格式打印响应,就像block() 一样?

【问题讨论】:

    标签: spring spring-boot spring-webflux alfresco project-reactor


    【解决方案1】:

    subscribe() 方法返回一个Disposable 对象:

     public final Disposable subscribe()
    

    在控制台上打印响应的预期方式是实际使用doOnNext 运算符,如下所示:

    private void getNodeDetail() {
        webClient.get()
                .uri("/alfresco/api/-default-/public/alfresco/versions/1/nodes/f37b52a8-de40-414b-b64d-a958137e89e2")
                .retrieve()
                .bodyToMono(String.class)
                .doOnNext(response -> System.out.println(response))
                .subscribe();
    }
    

    【讨论】:

    • 太棒了。非常感谢。拯救了我的一天。
    • 那么请考虑对答案进行投票并接受它为正确的答案,以便其他人可以从中受益并轻松理解这可能是解决类似问题的可能解决方案;)谢谢!
    猜你喜欢
    • 2019-10-29
    • 1970-01-01
    • 2016-03-31
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    相关资源
    最近更新 更多