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.