2010-10-08 15 views
12

Web servisine çağrı yapmak için RestTemplate kullanıyorum.Spring RestTemplate'de nasıl yanıt kaydederim?

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

bu kullanıcı kimliği sadece boş döndü olsun ama neden bilmiyorum dönmek başarısız olursa. Gerçek XML yanıtını bir günlüğe nasıl çıktırabilirim?

+0

Hangi XML yanıtı? – skaffman

+0

da kullanabilirsiniz LoggingRequestInterceptor cf http://stackoverflow.com/a/22620168/409784 – Francois

+0

Çözülmüş https://stackoverflow.com/questions/7952154/spring-resttemplate-how-to-enable-full- Hata ayıklama-istekleri-yanıtları yanıtlama/47467572 – user2746033

cevap

11

göstermek dışarı, sen gerçek HTTP bağlantı sınıflar içindeki günlüğü dönüm bakabilir. Eğer HttpClient müşterekleri kullanıyorsanız

Örneğin, ayarlayabileceğiniz

log4j.logger.httpclient.wire=DEBUG 

commons-httpclient proje an entire page in the documentation on their logging practices sahiptir.

+1

Kullanmakta olduğum yöntemi bilmiyorum, hepsi RestTemplate'in kaputu altında. Log4j.logger.httpclient.wire kullanma hiçbir şey yapmıyor gibi görünüyor. – rjsang

+0

İlk önce TÜM Bahar için günlüğe kaydetmeyi RestTemplate'ın kapağının altında neler olup bittiğini anlamak için öneririm, bu size bir sonraki adımın nerede olduğuna dair bir fikir verebilir. –

+0

Üzgünüm, bu eski ama bunu doğru cevap olarak işaretlemeyi unuttum! – rjsang

9

aşağıdaki gibi günlük yapılandırın: Eğer gerekebilir böylece

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

Sonra çıkış görmek için kıvırın komutunu kullanın, örneğin, varsayılan olarak

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

, restTemplate, (SimpleClientHttpRequest aracılığıyla) HttpURlConnection kullanır log deyimini görmek için jakarta httpclient'e geçmek. Aksi takdirde yukarıdaki günlük yapılandırması kullandığınız HTTP bağlantısı yapma yöntemine bağlı olarak size yanıtı

<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

Bu log4j ayarı, istekleri günlüğe kaydeder, yanıtları günlüğe kaydetmez. o pencere ortamı çünkü curl kullanamaz, artı günlük entegrasyon testleri için etkin olduğunu bu yüzden kod temeli bir parçası olarak taahhüt edebilecek bir şey arıyorum – rjsang

+0

, Windows kıvrılma versiyonları ve ayrıca CygWin sürümü vardır : http://curl.haxx.se/download.html#Win32 –

0

Sen RestTemplate HTTP trafiğini günlüğe spring-rest-template-logger kullanabilirsiniz.

sizin Maven'in proje için bir bağımlılık ekleyin:
<dependency> 
    <groupId>org.hobsoft.spring</groupId> 
    <artifactId>rest-template-logger</artifactId> 
    <version>0.1.0</version> 
</dependency> 

Sonra özelleştirmek senin şu RestTemplate gibidir:

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

Artık tüm RestTemplate HTTP trafiği ayıklama seviyesinde org.hobsoft.spring.resttemplatelogger.LoggingCustomizer kayda geçer.

YASAL UYARI: Bu kütüphane yazdım.

+0

Bu bağlantı soruyu yanıtlayabilirken, cevabın temel kısımlarını buraya eklemek ve referans için bağlantı sağlamak daha iyidir. Bağlantılı sayfa değiştiğinde yalnızca bağlantı yanıtları geçersiz olabilir.- [Yorum Yaz] (/ review/düşük kaliteli yazılar/17802986) –

+0

@ Al-Mothafar Teşekkürler, ilgili bilgileri buraya ekledim. –

İlgili konular