Me gustaría obtener los cuerpos de solicitud y respuesta REST para fines de registro en mi aplicación.
Actualmente tengo una clase loggingRequestInterceptor que implementa ClientHttpRequestInterceptor, muy similar a la respuesta de sofiene aquí .
Luego agregué este interceptor como una propiedad dentro de mi plantilla de descanso en mi configuración de primavera.
Mi código se muestra a continuación:
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; } }Propiedad de primavera en mi RestTemplate:
<property name="interceptors"> <list> <bean class="com.company.projectName.service.api.rest.io.impl.LoggingRequestInterceptor" /> </list> </property>Sin embargo, en todas mis llamadas de descanso registro el método y el URI, pero el cuerpo y el cuerpo de la respuesta están vacíos. ¿Cuál es la forma correcta de obtener los cuerpos de la solicitud y la respuesta para permitir que mi aplicación registre esta información?
Solución: Primero, el cuerpo de la solicitud estaba en blanco porque este es un método GET. En segundo lugar, también necesitaba registrar el ResponseStatusCode ya que estaba recibiendo un estado de 204 que es Sin contenido, lo que resultó en un cuerpo de respuesta en blanco.