使用 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;
}
}
我正在使用 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;
}
}