如何使用不同的URL创建HttpServletResponse

问题描述 投票:-1回答:1

与我的另一个问题:Spring MVC - Downloading PDF using outputstream & HttpServletResponse

我相信我没有收到任何下载的原因是因为我没有在客户端上收到HttpServletResponse。这是因为我的客户端位于与响应所响应的请求URL不同的URL上。我的客户在以下URL上:“ / inventory /”。当客户端单击一个按钮时,它会将包含我需要生成pdf的相关数据的POST发送到/ vm / dormant / pdfReport。该Web应用程序具有数十个控制器,其组织方式使得与模型对象相关的所有数据都通过每个模型的不同URL。在这种情况下,请求访问VM模型对象,因此控制器具有所有VM相关任务的以/ vm /开头的URL。

问题是,用户在页面/ inventory /上,单击按钮会将POST响应发送到/ vm / dormant / pdfReport,并且控制器成功接收到请求并生成PDF文件。但是响应返回到/ vm / dormant / pdfReport,这不是客户端所在的URL。如何将响应发送回/ inventory /而不是/ 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();
}
java rest spring-mvc servlets
1个回答
0
投票

您发送ajax请求吗?如果是这样,那么您就不会有这样的问题,因为发送请求的人都会收到响应。您是否可以检查是否收到标题为Content-Disposition =“ ****”的响应;如果是这样,导出PDF的方式一定是错误的。

© www.soinside.com 2019 - 2024. All rights reserved.