我正在使用RestTemplate来调用Web服务。
String userId = restTemplate.getForObject(createUserUrl, String.class);
如果这不能返回用户ID,我只是返回null但我不知道为什么。如何将实际的XML响应输出到日志?
答案 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左右