2015-11-24 1 views
0

Я использую Spring и RestTemplate для отправки запросов службе REST. Есть ли способ получить (байтовый) размер фактического запроса? Оптимально он включает в себя размер HTTP-запроса, включая размер сериализованного объекта myObject для запросов GET и POST.Получить размер сериализованного запроса с использованием Spring RestTemplate

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); 
+0

вы имеете в виду размер Http тела или размер сырья пакета TCP? – iMysak

ответ

0

Вы можете использовать перехватчик, чтобы перехватить запрос/отклик аналогично фильтру в Java-сервлете. Вы должны прочитать ответ и с помощью 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; 
    } 
} 
+0

и как бороться с запрошенным запросом? – bgalek