Как создать HttpServletResponse с другим URL - PullRequest
0 голосов
/ 25 октября 2019

Относится к моему другому вопросу: 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();
}

1 Ответ

0 голосов
/ 25 октября 2019

ru отправка ajax-запроса? Если это так, у вас не должно быть такой проблемы, потому что тот, кто отправит запрос, получит ответ. можете ли вы проверить, получили ли вы ответ с заголовком Content-Disposition = "****";Если это так, то способ экспорта PDF должен быть неправильным.

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