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

Java Spring:如何从ClientResponse获取原始请求?

直接从ClientResponse里获取原始请求是做不到的,因为它并没有提供公开API来暴露这个信息。

要实现你的日志需求,别用ofResponseProcessor(),改用ExchangeFilterFunction的完整重载方法——它同时接收ClientRequest和ExchangeFunction参数,这样你能直接拿到原始请求,再和后续返回的响应关联起来:

@Bean
public ExchangeFilterFunction logResponse() {
    return (request, next) -> {
        // 提前保存原始请求的方法和URI
        HttpMethod method = request.method();
        URI uri = request.url();
        return next.exchange(request)
            .doOnEach(responseSignal -> {
                if (responseSignal.hasElement()) {
                    ClientResponse response = responseSignal.get();
                    log.info("""
                                {} {}
                                {}
                                Response Headers: {}""",
                        method, uri,
                        response.statusCode(),
                        response.headers().asHttpHeaders());
                }
            });
    };
}

这么做的逻辑很直接:ExchangeFilterFunction本来就是用来拦截完整的请求-响应链路,在发起请求前先把原始请求的信息存下来,等响应返回后再结合着输出日志就行。

如果非要纠结用ofResponseProcessor(),那只能通过ClientRequest的attributes()把请求信息提前存进去,再在响应处理环节取出来,但这种方式多了一步传递逻辑,反而不如上面的方案简洁直接。

内容的提问来源于stack exchange,提问作者Honza Zidek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:40:23