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

Spring Integration:如何在WebFlux中通过AbstractRequestHandlerAdvice检查HTTP响应?

解决方案

当使用webflux:outbound-gateway时,callback.execute()返回的是Mono<Message<?>>(具体类型为MonoMapFuseable),你可以通过Reactor的副作用操作符在不消费数据流的前提下记录返回的payload,核心思路是利用doOnNext或doOnSuccess添加日志逻辑,同时保持原Mono的流转。

修改你的MyLogger通知处理器代码如下:

public class MyLogger extends AbstractRequestHandlerAdvice {

    // ...

    @Override
    protected Object doInvoke(ExecutionCallback callback, Object target, Message<?> message) {
        // ... 调用前日志记录 ...

        Object result = callback.execute();

        // 针对响应式类型(Mono)添加日志逻辑
        if (result instanceof Mono) {
            return ((Mono<?>) result)
                    .doOnNext(responseMsg -> {
                        if (responseMsg instanceof Message) {
                            // 读取并记录payload
                            Object payload = ((Message<?>) responseMsg).getPayload();
                            // ... 调用后日志记录,比如打印payload信息 ...
                            System.out.println("Response payload: " + payload);
                        }
                    });
        } else {
            // 兼容非响应式场景的原有日志逻辑
            // ... 调用后日志记录 ...
            return result;
        }
    }
}

关键说明

  • doOnNext是Reactor的副作用操作,仅当Mono成功发射数据时执行日志逻辑,不会触发订阅(消费),订阅动作由下游的Spring Integration组件处理,完全保留响应式流程的异步非阻塞特性。
  • 禁止调用block()或subscribe(),这些方法会强制消费Mono,破坏响应式模型,引入同步阻塞。
  • 代码中保留了对非响应式返回值的兼容处理,确保在混合场景下依然可用。

内容的提问来源于stack exchange,提问作者al.truisme

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:40:36