如何在Spring RestTemplate中记录响应?

时间:2010-10-08 15:27:20

标签: java spring rest logging

我正在使用RestTemplate来调用Web服务。

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

如果这不能返回用户ID,我只是返回null但我不知道为什么。如何将实际的XML响应输出到日志?

5 个答案:

答案 0 :(得分:11)

根据您正在使用的HTTP连接的哪种方法,您可以查看在实际的HTTP连接类中打开日志记录。

例如,如果您使用公共HttpClient,则可以设置

log4j.logger.httpclient.wire=DEBUG

commons-httpclient项目有an entire page in the documentation on their logging practices

答案 1 :(得分:9)

按如下方式配置日志记录:

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">
...

答案 2 :(得分:3)

您可以使用spring-rest-template-logger记录RestTemplate HTTP流量。

为您的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()

现在所有RestTemplate HTTP流量都将在调试级别记录到org.hobsoft.spring.resttemplatelogger.LoggingCustomizer

免责声明:我写了这个图书馆。

答案 3 :(得分:0)

您无需编写任何代码, 您只需要在application.properties文件中添加以下属性

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

使用它会以调试模式记录其余模板调用的请求正文,请求标头,请求URL和响应正文。

答案 4 :(得分:0)

如果使用swagger生成基于RestTemplate的客户端,则在ApiClient中有一个公共方法setDebugging,可以将其设置为true或false,然后我就可以看到发生了什么。 希望这可以帮助。 我使用了最新的swager generator cli,我认为它是2.9左右