【发布时间】:2016-03-07 00:58:49
【问题描述】:
我有一个客户端需要将大量大型 json 文件发布到服务器。我已经能够通过将每个文件读入内存并使用 RestTemplate 发布整个文件来使其工作。但是,客户端在处理大型 json 文件时会很快耗尽内存。我想切换到流式处理方法,但不知道如何正确使用带有 RestTemplate 的 FileInputStream。我找到了this question 并使用了接受的答案中给出的代码,但我仍然看到内存使用情况和 OutOfMemory 异常,这让我相信它不是流式传输文件,而是仍然将它们完全读入内存。我究竟做错了什么?这是我目前拥有的:
final InputStream fis = ApplicationStore.class.getResourceAsStream(path);
final RequestCallback requestCallback = new RequestCallback() {
@Override
public void doWithRequest(final ClientHttpRequest request) throws IOException {
request.getHeaders().add("Content-type", "application/json");
IOUtils.copy(fis, request.getBody());
}
};
final RestTemplate restTemplate = new RestTemplate();
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setBufferRequestBody(false);
restTemplate.setRequestFactory(requestFactory);
final HttpMessageConverterExtractor<String> responseExtractor =
new HttpMessageConverterExtractor<String>(String.class, restTemplate.getMessageConverters());
restTemplate.execute("http://" + host + ":8080/upads-data-fabric" + "/ruleset", httpMethod, requestCallback, responseExtractor);
【问题讨论】:
标签: java resttemplate