gpt4 book ai didi

java - Spring ClientHttpRequestInterceptor

转载 作者:行者123 更新时间:2023-12-01 10:52:29 27 4
gpt4 key购买 nike

我的 Spring Boot 应用程序中有下面列出的loggingInterceptor。每当调用 REST 服务时都会调用此拦截器。我看到前 2 个 sysout 语句立即打印,第三个 sysout 语句在 REST 调用后打印。仅当调用 getBody() 时才进行 REST 调用吗?请您解释一下这是如何工作的?谢谢。

public class LoggingInterceptor implements ClientHttpRequestInterceptor { 
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
System.out.println(" Before Calling Execute in LoggingInterceptor " + new Date());
ClientHttpResponse response = execution.execute(request, body);
System.out.println(" After Calling Execute in LoggingInterceptor " + new Date());
InputStream responseStream = response.getBody();
System.out.println(" After getBody() " + new Date());
}
}

最佳答案

这是我的两分钱。

这是因为 ClientHttpRequestInterceptor 是一个请求拦截器并充当代理。现在,这意味着它应该能够处理修改请求并根据需要发送响应。

因此,当执行以下命令时:

ClientHttpResponse 响应 =execution.execute(request, body);

响应既没有提交,也没有触发请求,只是缓冲以供修改(如果有),从类中可以明显看出:

类 InterceptingClientHttpRequest 扩展 AbstractBufferingClientHttpRequest {....}

所以,当你执行以下操作时:

InputStream响应流=response.getBody();

缓冲的请求触发请求,获取响应输出流。

关于java - Spring ClientHttpRequestInterceptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33771063/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com