当前位置:  开发笔记 > 编程语言 > 正文

使用RestTemplate POST InputStream

如何解决《使用RestTemplatePOSTInputStream》经验,为你挑选了1个好方法。

我有一个客户端需要将大量的大型json文件POST到服务器.我已经能够通过将每个文件读入内存并使用RestTemplate发布整个文件来实现它.但是,客户端快速耗尽处理大型json文件的内存.我想切换到流式方法,但无法弄清楚如何正确使用RestInmplate的FileInputStream.我发现了这个问题,并使用了接受的答案中给出的代码,但我仍然看到内存使用和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 responseExtractor =
         new HttpMessageConverterExtractor(String.class, restTemplate.getMessageConverters());

restTemplate.execute("http://" + host + ":8080/upads-data-fabric" + "/ruleset", httpMethod, requestCallback, responseExtractor);

Sotirios Del.. 11

别.使用Resource结合适当的RestTemplate#exchange方法.

HttpEntityResourceas 创建一个body.有ClassPathResource代表类路径资源.在RestTemplate默认情况下,注册一个ResourceHttpMessageConverter哪些流.



1> Sotirios Del..:

别.使用Resource结合适当的RestTemplate#exchange方法.

HttpEntityResourceas 创建一个body.有ClassPathResource代表类路径资源.在RestTemplate默认情况下,注册一个ResourceHttpMessageConverter哪些流.


嗯......它似乎仍在将文件读入内存,我很快就会遇到OutOfMemory异常.我错过了什么吗?这就是我做的http://pastebin.com/ytjHDjR1
推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有