У меня есть клиент, которому нужно отправить на сервер большое количество больших файлов json. Мне удалось заставить его работать, прочитав каждый из файлов в память и опубликовав весь файл с помощью RestTemplate. Однако клиенту быстро не хватает памяти при работе с большими файлами json. Я хочу переключиться на потоковый подход, но не могу понять, как правильно использовать FileInputStream с RestTemplate. Я нашел этот вопрос и использовал код, указанный в принятом ответе, но Я все еще вижу использование памяти и исключения 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);