【发布时间】:2016-06-24 07:39:41
【问题描述】:
使用 Spring RestTemplate,缓冲请求正文设置为 false 和空正文
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setBufferRequestBody(false);
requestFactory.setConnectTimeout(60_000);
RestTemplate restTemplate = RestTemplate(requestFactory);
restTemplate.exchange(uri, HttpMethod.PUT, new HttpEntity<>(httpHeaders), Void.class);
我收到411 - Length Required 状态码作为响应。
由于某种原因,Spring RestTemplate 没有将Content-Length: 0 标头放在请求中。
如果我评论 requestFactory.setBufferRequestBody(false); 行,它可以完美运行。但我需要它来发送大文件。
UPD:查看调试日志显示,该请求不包含 Content-Length 标头。
【问题讨论】:
-
您能否在
restTemplate.exchange调用中添加参数值? -
更新到 HttpMethod.PUT。但其他参数并不重要。 uri - 一些机架空间服务 uri,httpHeaders 是单一授权令牌。
-
问题是,该请求中没有标头 Content-Length。使用 debug resttemplate logging 检查它。
-
我最感兴趣的是你如何阅读和发送文件。
-
可能http客户端使用
chunked encoding:en.wikipedia.org/wiki/Chunked_transfer_encoding。您发送的文件大小是多少?
标签: java spring resttemplate requestfactory spring-web