6

在我沮丧地放弃并重写这种“老派风格”(不使用 Spring)之前,我希望了解 Spring 的 HTTP 客户端内容的人可以帮助我。

我有一些想要通过 HTTP 发送到 Web 服务的大型数据。我希望能够分块发送。Spring 源代码清楚地表明,如果您调用SimpleClientHttpRequestFactory'setBufferRequestBody方法,将其布尔参数设置为false,结果ClientHttpRequest将“流式传输”到其目标,即,它将使用“分块传输编码”。但是,有一个警告:只有在请求内容长度未知时才会使用分块编码。

这就是我的问题。尴尬地说,我无法弄清楚如何使内容长度未知。这里的一个场景可能是一个大字节数组,我想以较小的块而不是一次全部发送。但在我看来,几个相关的RestTemplate调用,例如exchange()postForObject(),确切地知道请求内容是什么以及它有多长。所以,按照这样的顺序:

HttpEntity<Object> entity = new HttpEntity<Object>(payload, headers);
ResponseEntity<byte[]> response = null; 
response = restTemplate.exchange(svcUrl, httpMethod, entity, byte[].class);

交换逻辑可以检查HttpEntity以找出请求正文的长度(在我的示例代码中为有效负载)。因此,请求带有Content-Length标头发送。

我觉得我一定错过了一些非常明显的东西。我很感激你能对此有所了解。

环境:

  1. 3.2.3 版本的几个 Spring 组件
  2. JDK 1.7.0_40
  3. Windows 2008R2(目前)
4

0 回答 0