在不使用@PathVariable的情况下在Spring Controller中为PDF命名

时间:2013-10-10 10:02:03

标签: java spring spring-mvc

我有Spring Controller,调用它的Request map。我正在生成PDF文件。但问题是 生成的PDF的名称与请求映射名称相同。

我知道我们可以使用@PathVariable来命名。但我不想使用它。

示例:

@RequestMapping(value = { "/pdfDownload" }, method = RequestMethod.GET)
public void pdfDownload(HttpServletRequest request, HttpServletResponse response) {
        //Logic OF generating PDF file

    // set response
    response.setContentType("application/pdf");
    response.setCharacterEncoding("UTF-8");
    response.setHeader("Content-Disposition", "inline; filename=Mypdf12345.pdf");

}

下面, 我生成的PDF文件名称为pdfDownload.But我希望它为Mypdf12345.pdf。 我不想使用@PathVariable

请帮我解决这个问题。 谢谢。

3 个答案:

答案 0 :(得分:1)

response.setContentType("application/pdf");
response.setCharacterEncoding("UTF-8");    
response.setHeader("Content-Disposition", "attachment; filename=Mypdf12345.pdf");

答案 1 :(得分:0)

以这种方式试试

response.setContentType("application/x-pdf");
response.addHeader("Content-Disposition", "attachment; filename=Mypdf12345.pdf");

答案 2 :(得分:-1)

我得到了答案。 早期的问题是我使用响应的输出流来编写PDF文档。 因此,现在我正在向ByteArrayOutputStream写PDF文档,在完成写作之后,我正在将该流写入响应的outputsteram。

e.g。

@RequestMapping(value = { "/pdfDownload" }, method = RequestMethod.GET)
public void pdfDownload(HttpServletRequest request, HttpServletResponse response) {

      //using bytearrayoutputstream instead of response outputstream,
      ByteArrayOutputStream  out = new ByteArrayOutputStream();


        //Logic OF generating PDF file

    // set response
    response.setContentType("application/pdf");
    response.setCharacterEncoding("UTF-8");
    response.setHeader("Content-Disposition", "inline; filename=Mypdf12345.pdf");

    //transferring that stream to response output stream
    out.writeTo(response.getOutputStream());

}

就是这样。 感谢您的回复。