2010-10-08 12 views
12

Sto utilizzando RestTemplate per effettuare chiamate a un servizio web.Come posso registrare la risposta in Spring RestTemplate?

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

Se questo non restituisce un ID utente, mi viene restituito null ma non so perché. Come posso generare la risposta XML effettiva in un log?

+0

Quale risposta XML? – skaffman

+0

È inoltre possibile utilizzare LoggingRequestInterceptor cf http://stackoverflow.com/a/22620168/409784 – Francois

+0

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

risposta

11

A seconda del metodo di fare la connessione HTTP che si sta utilizzando, si poteva guardare alzare il logging all'interno delle classi di connessione HTTP attuali.

Ad esempio, se si sta utilizzando comuni HttpClient, è possibile impostare

log4j.logger.httpclient.wire=DEBUG 

I commons-HttpClient progetto ha an entire page in the documentation on their logging practices.

+1

Non so quale metodo sto usando, è tutto sotto il cofano di RestTemplate. L'uso di log4j.logger.httpclient.wire non sembra fare nulla. – rjsang

+0

Suggerisco prima di aprire il logging per TUTTO di Spring per capire cosa sta succedendo sotto il cofano di RestTemplate, questo potrebbe darti un'idea di dove andare dopo. –

+0

Siamo spiacenti, questo è vecchio ma ho dimenticato di contrassegnarlo come la risposta corretta! – rjsang

9

Configurare il logging come segue:

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

Poi utilizzare un comando curl per visualizzare l'output, ad esempio

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

Per impostazione predefinita, restTemplate usa HttpURLConnection (via SimpleClientHttpRequest), quindi potrebbe essere necessario per passare a jakarta httpclient per vedere la dichiarazione del registro. In caso contrario, la configurazione di registro di sopra di fuori si mostrerà la risposta

<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

Questa impostazione di log4j registra le richieste ma non le risposte. Non posso usare arricciare perché è un ambiente Windows, inoltre sto cercando qualcosa che potrei commettere come parte del codebase in modo che la registrazione sia abilitata per i nostri test di integrazione – rjsang

+0

Ci sono versioni di Windows di arricciatura, e anche versioni di cygwin : http://curl.haxx.se/download.html#Win32 –

0

È possibile utilizzare spring-rest-template-logger per registrare il traffico HTTP RestTemplate.

aggiungere una dipendenza al progetto Maven:

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

quindi personalizzare il vostro RestTemplate come segue:

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

Ora tutto RestTemplate HTTP traffico verrà registrato a org.hobsoft.spring.resttemplatelogger.LoggingCustomizer a livello di debug.

DISCLAIMER: Ho scritto questa libreria.

+0

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia.- [Dalla recensione] (/ recensione/post di bassa qualità/17802986) –

+0

@ Al-Mothafar Grazie, ho incluso le informazioni rilevanti qui. –

Problemi correlati