使用 Spring RestTemplate 获取序列化请求的大小

Get size of serialized Request using Spring RestTemplate

我正在使用 Spring 和 RestTemplate 向 REST 服务发送请求。有没有办法获取实际请求的(字节)大小?最好它包括 HTTP 请求的大小,包括 GET 和 POST 请求的序列化 myObject 对象的大小。

template.postForObject(restUrl, myObject, MyObject.class);
template.getForObject(restUrl, MyObject.class);

基本上我想知道实际传输了多少数据。

谢谢!


[编辑]:

只是为了完成答案,这就是您将拦截器添加到 RestTemplate 的方式。我还编辑了 LengthInterceptor 以显示请求的内容长度而不是响应。

final List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>();
interceptors.add( new LengthInterceptor() );
template.setInterceptors( interceptors );

您可以使用拦截器拦截 request/response 类似于 java servlet 中的过滤器。您必须阅读响应并使用 getHeaders().getContentLength() 您将获得正文长度:

public class LengthInterceptor implements ClientHttpRequestInterceptor {
    @Override
    public ClientHttpResponse intercept( HttpRequest request, byte[] body, ClientHttpRequestExecution execution ) throws IOException {

        ClientHttpResponse response = execution.execute( request, body );
        long length = response.getHeaders().getContentLength();
        // do something with length
        return response;
    }
}