2010-10-08 2 views
12

Я использую RestTemplate для совершения звонков в веб-службу.Как зарегистрировать ответ в Spring RestTemplate?

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

Если это не удается вернуть идентификатор пользователя, я просто получаю null, но не знаю почему. Как вывести фактический ответ XML в журнал?

+0

Какой ответ XML? – skaffman

+0

Вы также можете использовать LoggingRequestInterceptor сравни http://stackoverflow.com/a/22620168/409784 – Francois

+0

Решенный https://stackoverflow.com/questions/7952154/spring-resttemplate-how-to-enable-full- debugging-logging-of-requests-answers/47467572 – user2746033

ответ

11

В зависимости от того, какого метода создания соединения HTTP, который вы используете, вы можете взглянуть на поднимание регистрации в реальных классах соединений HTTP.

Например, если вы используете обыкновенные HttpClient, вы можете установить

log4j.logger.httpclient.wire=DEBUG 

В Обще-HttpClient проект имеет an entire page in the documentation on their logging practices.

+1

Я не знаю, какой метод я использую, все это под капотом RestTemplate. Использование log4j.logger.httpclient.wire, похоже, ничего не делает. – rjsang

+0

Я предлагаю сначала открыть журнал для ВСЕЙ весны, чтобы понять, что происходит под капотом RestTemplate, это может дать вам представление о том, куда идти дальше. –

+0

Извините, это уже давно, но я забыл отметить это как правильный ответ! – rjsang

9

Настройка протоколирования следующим образом:

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

Затем используйте завиток команду, чтобы увидеть выход, например

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

По умолчанию restTemplate использует HttpURLConnection (через SimpleClientHttpRequest), так что вы, возможно, потребуется чтобы перейти к jakarta httpclient, чтобы увидеть оператор журнала. В противном случае вышеописанная конфигурация журнала будет вне показать вам ответ

<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

Эта настройка log4j регистрирует запросы, но не ответы. Я не могу использовать завиток, потому что это среда Windows, плюс я ищу что-то, что я мог бы зафиксировать как часть базы кода, чтобы включить ведение журнала для наших интеграционных тестов. – rjsang

+0

Существуют версии для завивки Windows, а также версии cygwin : http://curl.haxx.se/download.html#Win32 –

0

Вы можете использовать spring-rest-template-logger для регистрации RestTemplate HTTP-трафика.

Добавить зависимости к Maven проекта:

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

Затем настроить ваш RestTemplate следующим образом:

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

Теперь все RestTemplate HTTP-трафик будет регистрироваться org.hobsoft.spring.resttemplatelogger.LoggingCustomizer на уровне отладки.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я написал эту библиотеку.

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится.- [Из обзора] (/ review/low-quality-posts/17802986) –

+0

@ Al-Mothafar Спасибо, я включил соответствующую информацию здесь. –

Смежные вопросы