java Spring ClientHttpRequestInterceptor
我的spring boot应用程序中有下面列出的loggingInterceptor。每当调用REST服务时,就会调用此拦截器。我看到第一个2 sysout语句立即打印,第三个sysout语句在进行REST调用后打印。REST调用是否仅在调用getBody()时进行?你能解释一下这是怎么回事吗?谢谢
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());
}
}
# 1 楼答案
这是我的两分钱
这是因为ClientHttpRequestInterceptor是请求的拦截器,充当代理。现在,这意味着它应该能够处理修改请求和根据需要发送响应
因此,当执行以下操作时:
ClientHttpResponse响应=执行。执行(请求、正文)
响应既不提交,也不触发请求,只是缓冲以进行修改(如果有),从类中可以明显看出:
类拦截ClientHttPrequest扩展了AbstractBufferingClientHttpRequest{ .. ..}
所以,当你做以下事情时:
InputStream responseStream=响应。getBody()
缓冲请求触发请求,获取响应输出流