如何通过Spring的chunked传输编码发送HTTP请求

Pau*_*aul 5 java rest spring http

在我沮丧地放弃并改写这种"旧学校风格"(不使用Spring)之前,我希望知道Spring的HTTP客户端知识的人可以帮助我.

我有一些大型数据,我想通过HTTP发送到Web服务.我希望能够以块状发送它.春源代码清楚地表明,如果调用SimpleClientHttpRequestFactorysetBufferRequestBody方法,它的布尔参数设置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);
Run Code Online (Sandbox Code Playgroud)

交换逻辑可以检查HttpEntity以确定请求体的长度(有效负载,在我的示例代码中).因此,请求与Content-Length标头一起发送.

我觉得我必须遗漏一些非常明显的东西.我很感激你能解决这个问题.

环境:

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