2015-11-24 4 views
0

J'utilise Spring et RestTemplate pour envoyer des demandes à un service REST. Existe-t-il un moyen d'obtenir la taille (en octets) de la requête réelle? De manière optimale, il inclut la taille de la requête HTTP, y compris la taille de l'objet myObject sérialisé pour les requêtes GET et POST.Obtenir la taille de la requête sérialisée à l'aide de Spring RestTemplate

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

Fondamentalement, je veux savoir combien de données sont réellement transmises.

Merci!


[modifier]:

Juste pour compléter la réponse, voici comment vous ajoutez l'Interceptor au RestTemplate. J'ai également édité le LengthInterceptor pour montrer la longueur de contenu de la demande au lieu de la réponse.

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

voulez-vous dire la taille du corps http ou la taille du paquet tcp cru? – iMysak

Répondre

0

Vous pouvez utiliser un intercepteur pour intercepter la requête/réponse de manière similaire au filtre dans la servlet Java. Vous devez lire la réponse et l'utilisation getHeaders().getContentLength() vous aurez la longueur du corps:

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

et comment faire face à la demande en bloc? – bgalek