Относится к моему другому вопросу: Spring MVC - загрузка PDF с использованием outputtream & HttpServletResponse
Я считаю, что причина, по которой я не получаю никакой загрузки, заключается в том, что я не получаюHttpServletResponse на клиенте для начала. Это потому, что мой клиент находится на другом URL-адресе, чем URL-адрес запроса, на который отвечает ответ. Мой клиент находится по этому адресу: "/ inventory /". Когда клиент нажимает на кнопку, он отправляет POST в / vm / dormant / pdfReport с соответствующими данными, которые мне нужны для создания PDF. Веб-приложение имеет десятки контроллеров, организованных таким образом, что все данные, относящиеся к объекту модели, проходят через различные URL-адреса для каждой модели. В этом случае запрос обращается к объектам модели ВМ, поэтому у контроллера есть URL-адреса, начинающиеся с / vm / для всех задач, связанных с ВМ.
Проблема в том, что пользователь находится на странице / инвентаризации /, нажав кнопку отправляет ответ POST в / vm / dormant / pdfReport, и контроллер успешно получает запрос и генерирует файл PDF. Но ответ возвращается к / vm / dormant / pdfReport, который не является URL-адресом клиента. Как я могу отправить ответ обратно в / инвентарь / вместо / vm / dormant / pdfReport?
Я изучал переадресацию и перенаправление, но не думаю, что это то поведение, которое я ищу. Как я могу отправить ответ на правильный URL?
Мой соответствующий JSP:
$("#downloadReport").click(function(){
idleVmReport();
});
function idleVmReport(){
var url = "/vm/dormant/";
$.post(url, {sdkUrl:$("#slVcenterUrl").val(), threshold:$("#searchDate").val()}, function(data){
console.log("pdf request");
}).fail(function(){
console.log("pdf request failed");
});
}
<button type="button" id="downloadReport" class="btn btn-default btn-etc btn-small"><i class="icon-save"></i> Download PDF</button>
Соответствующий код контроллера:
@RequestMapping("/vm/dormant/pdfReport") {
public void exportIdleVMReport(@RequestParam(value = "sdkUrl", required = true) String sdkUrl,
@RequestParam(value = "threshold", required = false, defaultValue = "30") int threshold,
HttpServletRequest request, HttpServletResponse response) {
//Try catch and other things omitted
String headerKey = "Content-Disposition";
String headerValue = String.format("attachment; filename=\"%s\"", fileName);
response.setHeader(headerKey, headerValue);
ServletOutputStream outputStream=response.getOutputStream();
JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream);
outputStream.flush();
outputStream.close();
}