У меня есть API, который возвращает огромные данные (> 7 МБ) в формате JSON. Устройство IOS обращается к этому API и хранит данные в локальном хранилище устройства. Поскольку размер ответа огромен, пользователь испытывает длительную задержку.
Я создал другой API с теми же данными, но на этот раз я использовал StreamingResponseBody, чтобы записать вывод непосредственно в объект ответа в виде потока. Теперь размер ответа уменьшен до 2 МБ. Но как клиентское устройство (IOS / Angular) может прочитать ответ? Потому что, когда я нажимаю на API от почтальона, вывод не читается.
Вот код контроллера -
@GetMapping( value = "/materials/stream")
public ResponseEntity<StreamingResponseBody> getMaterialsStreamed() {
StreamingResponseBody responseBody = outputStream -> {
try (ObjectOutputStream oos = new ObjectOutputStream(outputStream)) {
oos.writeObject(service.getMaterials()); // service.getMaterials() is returning Iterable<Material>
}
};
return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=generic_file_name.json")
.contentType(MediaType.APPLICATION_OCTET_STREAM).body(responseBody);
}