Я пытаюсь написать контроллер, который загружает PDF-файл в браузер. Я использую Jasper Reports для генерации PDF-файла в коде Java (полностью протестирован, и он отлично работает). Теперь я хочу получить поток вывода, который пишется Jasper Reports, и загрузить его в браузер. Однако, когда я нажимаю кнопку (которая отправляет POST методу моего сопоставленного контроллера), загрузка не происходит, и не возникает ошибка.
Соответствующий код:
@RequestMapping("/vm/dormant/pdfReport")
public void exportIdleVMReport(@RequestParam(value = "sdkUrl", required = true) String sdkUrl,
@RequestParam(value = "threshold", required = false, defaultValue = "30") int threshold,
HttpServletResponse response) {
try {
//Generated jasperPrint here
.....
//OutputStream outputStream = new FileOutputStream(file);
ServletOutputStream outputStream=response.getOutputStream();
/* Write content to PDF file */
JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream);
response.addHeader("Content-disposition", "attachment; filename=" + "employee.pdf");
response.setContentType("application/pdf");
outputStream.close();
outputStream.flush();
System.out.println("File Generated");
} catch (RemoteException | MalformedURLException e) {
e.printStackTrace();
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Я успешно добираюсь до «Сгенерированного файла» без каких-либо ошибок, я также генерирую файл, используя абсолютный путь, и это прекрасно работает. Я просто не получаю никакой загрузки файла в браузере, когда нажимаю на кнопку. Поскольку на сервере или в браузере нет ошибок, я не знаю, что я делаю неправильно. Может кто-нибудь сказать мне, что не так с моим кодом?
РЕДАКТИРОВАТЬ: Я не знаю, если это имеет значение, но я должен добавить, что это старый проект в моей компании. В проекте используются зависимости среды Spring от версии 4.3.0.RELEASE, сервлет javax версии 3.0.1.
РЕДАКТИРОВАТЬ 2: Протестировано путем изменения кода внешнего интерфейса для непосредственного доступа к / vm / dormant / pdfReport, и это работает! Если HttpServletResponse должен отправить ответ обратно на URL-адрес, с которого я отправил AJAX, почему он не работает должным образом?