Возврат CompletableFuture <T>в методе контроллера - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть два метода, возвращающих CompletableFuture в @RestController:

@RestController
public class SampleController {

    @GetMapping("/string")
    public CompletableFuture<String> string() {
        return CompletableFuture.supplyAsync(() -> " test123 ")
                .thenApply(String::trim)
                .thenApply(String::toUpperCase);
    }

    @GetMapping("/file")
    public CompletableFuture<FileSystemResource> fileSystemResource() {
        return CompletableFuture.supplyAsync(() -> new File("file.txt"))
                .thenApply(file -> {
                    try {
                        return zipFile(file);
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                })
                .thenApply(FileSystemResource::new);
    }

    private File zipFile(File fileToZip) throws IOException {
        File zippedFile = new File("zipped.zip");
        FileOutputStream fos = new FileOutputStream(zippedFile);

        ZipOutputStream zipOut = new ZipOutputStream(fos);
        FileInputStream fis = new FileInputStream(fileToZip);
        ZipEntry zipEntry = new ZipEntry(fileToZip.getName());
        zipOut.putNextEntry(zipEntry);
        byte[] bytes = new byte[1024];
        int length;
        while ((length = fis.read(bytes)) >= 0) {
            zipOut.write(bytes, 0, length);
        }
        zipOut.close();
        fis.close();
        fos.close();
        return zippedFile;
    }
}

Первый возвращает ожидаемый объект String, а второй возвращает некоторый хешированный текст, такой как "PK¸ £ {Mfile.txtKÊILÊIT (.(ÊÌKW0PKム{TPK¸ £ {Mム{Tfile.txtPK6G ". File.txt существует в classpath.

Почему я не получаю заархивированный файл? Я использую Spring Boot 1.5.17.RELEASE

Точно такой же метод в проекте с Spring Boot 2.1.0. Версия RELEASE возвращает красивый zip-файл.

Обработка потоков не является предметом этого обсуждения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...