Как зарегистрировать ответ в Spring RestTemplate?

Я использую RestTemplate для вызова веб-службы.

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

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

Ответ 1

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

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

log4j.logger.httpclient.wire=DEBUG

Проект commons-httpclient имеет всю страницу в документации по их правилам ведения журналов.

Ответ 2

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

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

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

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

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

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

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

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

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

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

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

Ответ 4

вам не нужно писать ни одной строки кода, вам просто нужно добавить следующее свойство в файл application.properties

logging.level.org.springframework.web.client.RestTemplate=DEBUG

используя это, он будет регистрировать тело запроса вызова шаблона остатка, заголовок запроса, URL запроса и тело ответа также в режиме отладки.