我有一个客户端需要将大量的大型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 HttpMessageConverterExtractorresponseExtractor = new HttpMessageConverterExtractor (String.class, restTemplate.getMessageConverters()); restTemplate.execute("http://" + host + ":8080/upads-data-fabric" + "/ruleset", httpMethod, requestCallback, responseExtractor);
Sotirios Del.. 11
别.使用Resource
结合适当的RestTemplate#exchange
方法.
HttpEntity
用Resource
as 创建一个body
.有ClassPathResource
代表类路径资源.在RestTemplate
默认情况下,注册一个ResourceHttpMessageConverter
哪些流.
别.使用Resource
结合适当的RestTemplate#exchange
方法.
HttpEntity
用Resource
as 创建一个body
.有ClassPathResource
代表类路径资源.在RestTemplate
默认情况下,注册一个ResourceHttpMessageConverter
哪些流.