有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    这是我的两分钱

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

    因此,当执行以下操作时:

    ClientHttpResponse响应=执行。执行(请求、正文)

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

    类拦截ClientHttPrequest扩展了AbstractBufferingClientHttpRequest{ .. ..}

    所以,当你做以下事情时:

    InputStream responseStream=响应。getBody()

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