2010-10-08 18 views
12

Estoy usando RestTemplate para hacer llamadas a un servicio web.¿Cómo registro la respuesta en Spring RestTemplate?

String userId = restTemplate.getForObject(createUserUrl, String.class); 

Si esto no devuelve una identificación de usuario, me devuelve nulo pero no sé por qué. ¿Cómo presento la respuesta XML real a un registro?

+0

¿Qué respuesta XML? – skaffman

+0

También puede utilizar LoggingRequestInterceptor cf http://stackoverflow.com/a/22620168/409784 – Francois

+0

Resuelta https://stackoverflow.com/questions/7952154/spring-resttemplate-how-to-enable-full- debugging-logging-of-requests-responses/47467572 – user2746033

Respuesta

11

Dependiendo de qué método de hacer la conexión HTTP que está utilizando, usted podría mirar a subir el registro dentro de las clases de conexión HTTP reales.

Por ejemplo, si está utilizando Commons HttpClient, se pueden establecer

log4j.logger.httpclient.wire=DEBUG 

Los comunes-httpclient proyecto tiene an entire page in the documentation on their logging practices.

+1

No sé qué método estoy usando, todo está bajo el capó de RestTemplate. El uso de log4j.logger.httpclient.wire no parece hacer nada. – rjsang

+0

Sugiero primero iniciar el registro de ALL of Spring para entender lo que sucede bajo el capó de RestTemplate, esto podría darle una idea de a dónde ir. –

+0

Lo siento, esto es antiguo, pero olvidé marcar esta como la respuesta correcta. – rjsang

9

Configure el registro de la siguiente manera:

log4j.logger.org.springframework.web.client=DEBUG 

luego usar un comando curl para ver la salida, por ejemplo

curl -H 'Accept: application/xml' -H 'Content-Type: application/xml' http://localhost:8080/ser/data 

Por defecto, restTemplate utiliza HttpURLConnection (a través de SimpleClientHttpRequest), lo que puede necesitar para cambiar a jcarta httpclient para ver la declaración de registro. De lo contrario, la configuración de registro por encima cabo le mostrará la respuesta

<bean id="httpClientFactory" class="org.springframework.http.client.CommonsClientHttpRequestFactory"> 
     <constructor-arg><bean class="org.apache.commons.httpclient.HttpClient"/></constructor-arg> 
    </bean> 
    <bean id="restTemplate" class="org.springframework.web.client.RestTemplate"> 
     <constructor-arg ref="httpClientFactory"/> 
     <property name="messageConverters"> 
... 
+3

Esa configuración log4j registra las solicitudes pero no las respuestas. No puedo usar curl porque es un entorno de Windows, además estoy buscando algo que pueda comprometer como parte de la base de código para que el registro esté habilitado para nuestras pruebas de integración – rjsang

+0

Hay versiones de Windows de curl, y también versiones de cygwin : http://curl.haxx.se/download.html#Win32 –

0

Puede usar spring-rest-template-logger para registrar RestTemplate tráfico HTTP.

Añadir una dependencia a su proyecto Maven:

<dependency> 
    <groupId>org.hobsoft.spring</groupId> 
    <artifactId>rest-template-logger</artifactId> 
    <version>0.1.0</version> 
</dependency> 

continuación, personalizar su RestTemplate de la siguiente manera:

RestTemplate restTemplate = new RestTemplateBuilder() 
    .customizers(new LoggingCustomizer()) 
    .build() 

Ahora todo el tráfico HTTP RestTemplate se registrará en org.hobsoft.spring.resttemplatelogger.LoggingCustomizer a nivel de depuración.

DESCARGO DE RESPONSABILIDAD: Escribí esta biblioteca.

+0

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia.- [De la crítica] (/ reseña/mensajes de baja calidad/17802986) –

+0

@ Al-Mothafar Gracias, he incluido la información relevante aquí. –

Cuestiones relacionadas