Загрузка обработки исключений файлового контроллера (как применить заголовок ответа вложения только в случае успеха) - PullRequest
0 голосов
/ 11 октября 2018

У меня есть контроллер, подобный этому:

@GetMapping(value = "/some_url")
public void foo(HttpServletResponse response) throws IOException {
    response.addHeader(CONTENT_DISPOSITION, "attachment;filename=" + BAR);
    response.setContentType(TXT_PLAIN + "; charset=" + UTF_8);
    someService.doSomeWork(response.getWriter());
}

doSomeWork:

try (CSVWriter csvWriter = new CSVWriter(writer, SEPARATOR, QUOTECHAR, ESCAPECHAR, LINE_END)) {
     if(someCondition()){
        throw new RuntimeException();
     }
     csvWriter.writeAll(csvLines);
} catch (IOException e) {
    LOGGER.warn("Can't write csv", e);
    throw new IllegalStateException(e);
}

Для случая, когда someCondition() возвращает true, поэтому RuntimeException выдает файл браузера из файла загрузки и я вижу ошибкутекст внутри.

Я пытался изменить порядок строк в контроллере следующим образом:

someService.doSomeWork(response.getWriter());
response.addHeader(CONTENT_DISPOSITION, "attachment;filename=" + BAR);
response.setContentType(TXT_PLAIN + "; charset=" + UTF_8);

Но похоже, что я не могу установить заголовки после закрытия средства записи ответов.

Ожидаемое поведение:
1. Для случая без ошибок - браузер загружает файл
2. Для случая с ошибкой - браузер не загружает файл, и я вижу ошибку в теле ответа.

Не могли бы вы помочь достичь этого?

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