如何在Spring RestTemplate中记录响应?

2022-09-04 02:04:28

我正在使用 RestTemplate 对 Web 服务进行调用。

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

如果这无法返回用户ID,我只会返回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 才能看到 log 语句。否则,上述日志配置将显示响应

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