RestTemplate 记录 POST 数据

Posted

技术标签:

【中文标题】RestTemplate 记录 POST 数据【英文标题】:RestTemplate logging POST data 【发布时间】:2013-05-10 12:34:23 【问题描述】:

我的 resttemplate.exchange() 在 POST 请求上失败,服务器返回 500 错误。

我尝试将根日志记录级别设置为 DEBUG,但在返回 500 错误之前没有记录任何内容。为了确保我的日志记录配置正确,我在 resttemplate 调用之前添加了一行

HttpClient client = new DefaultHttpClient();
client.execute(new HttpGet("http://google.com"));

在这种情况下确实出现了很多日志消息。

那么如何让 RestTemplate 导出调试数据呢?

谢谢 杨

【问题讨论】:

【参考方案1】:

根据您的分析,您似乎希望 RestTemplate 使用 Apache HttpClient。

但是,默认情况下,Spring RestTemplate 不使用 Apache HttpClient,而是通过 SimpleClientHttpRequestFactory 使用 JDK 工具(java.net.URL#openConnection() 等)。

org.springframework.http.client.support.HttpAccessor 声明:

private ClientHttpRequestFactory requestFactory = new
SimpleClientHttpRequestFactory();

据我所知,此客户端不支持记录请求/响应。

要将 RestTemplate 更改为使用 HttpClient,请尝试以下操作:

new RestTemplate(new HttpComponentsClientHttpRequestFactory());

然后,日志记录配置应启用 debug 级别的类别 org.apache.http.wire,以便记录完整的请求/响应。

【讨论】:

不确定这是否与版本相关,但为 org.apache.http.wire 设置调试对我来说在 Spring RestTemplate 上不起作用。

以上是关于RestTemplate 记录 POST 数据的主要内容,如果未能解决你的问题,请参考以下文章

springboot中使用restTemplate发送带参数和请求头的post,get请求

springboot RestTemplate post 两个tcp数据包 webserver报错

springboot使用restTemplate post提交值 restTemplate post值

使用RestTemplate在代码内调用POST请求的参数乱码问题

在 Spring Boot 中通过 RestTemplate POST JSON 对象

RestTemplate、Spring 启动、POST