Имам клиент, който трябва да публикува голям брой големи 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);