2017-03-20 1 views
0

Je souhaite récupérer les instances de demande et de réponse REST à des fins de consignation dans mon application.Spring ClientHttpRequestInterceptor demande/réponse vide

J'ai actuellement une classe loggingRequestInterceptor qui implémente ClientHttpRequestInterceptor, très similaire à la réponse de sofiene here.

J'ai ensuite ajouté cet intercepteur comme une propriété dans mon modèle de repos dans ma configuration de ressort.

Mon code est illustré ci-dessous:

public class LoggingRequestInterceptor implements ClientHttpRequestInterceptor { 

private static final Logger logger = LoggerFactory.getLogger(LoggingRequestInterceptor.class); 
@Override 
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { 

    ClientHttpResponse response = execution.execute(request, body); 

    response = log(request, body, response); 

    return response; 
} 

private ClientHttpResponse log(final HttpRequest request, final byte[] body, final ClientHttpResponse response) throws IOException { 
    final ClientHttpResponse responseCopy = new BufferingClientHttpResponseWrapper(response); 
    StringBuilder builder = new StringBuilder(); 
    builder.append("Method: ").append(request.getMethod().toString()); 
    builder.append("URI: ").append(request.getURI().toString()); 
    builder.append("Request Body: ").append(new String(body,"UTF-8")); 
    builder.append("Response body: ").append(convertStreamToString(responseCopy.getBody())); 
    logger.info(builder.toString()); 
    return responseCopy; 
    } 
} 

Spring Propriété sur mon RestTemplate:

<property name="interceptors"> 
     <list> 
      <bean class="com.company.projectName.service.api.rest.io.impl.LoggingRequestInterceptor" />      
     </list> 
    </property> 

Cependant, tous mes autres appels que je connecte la méthode et de l'URI, mais le corps et la le corps de la réponse est vide. Quelle est la bonne façon de saisir les corps de la requête et de la réponse afin de permettre à mon application de consigner cette information.

Répondre

1

Solution: Tout d'abord, le corps de la demande était vide car il s'agit d'une méthode GET. Deuxièmement, je devais également enregistrer le ResponseStatusCode au moment où je recevais un statut de 204 qui ne correspondait à aucun contenu, ce qui donnait un corps de réponse vide.