Java 如何为Jasper报告下载设置名称?

Java 如何为Jasper报告下载设置名称?,java,spring-mvc,servlets,jasper-reports,Java,Spring Mvc,Servlets,Jasper Reports,我在jasper-view.xml中声明了一个bean,如下所示 <bean id="resultsPdf" class="org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView" p:url="classpath:reports/resultsPdfFormat.jrxml" p:reportDataKey="datasource"> <prop

我在jasper-view.xml中声明了一个bean,如下所示

<bean id="resultsPdf"
      class="org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView"
      p:url="classpath:reports/resultsPdfFormat.jrxml"
      p:reportDataKey="datasource">
    <property name="headers">
        <props>
            <prop key="Content-Disposition">
                attachment; filename=results.pdf
            </prop>
        </props>
    </property>
</bean>
@RequestMapping(value = "/results-pdf", method = RequestMethod.GET)
@ResponseBody
public ModelAndView generateResultsPdf(@RequestParam("year") String year) {

    List<Student> studentList = studentService.getResultsByYear(year);
    JRDataSource jrDataSource = new JRBeanCollectionDataSource(studentList);
    Map<String, Object> parameterMap = new HashMap<>();
    parameterMap.put("title", "Results table"));
    parameterMap.put("datasource", jrDataSource);

    return new ModelAndView("resultsPdf", parameterMap);
}

附件filename=results.pdf
控制器中的方法如下所示

<bean id="resultsPdf"
      class="org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView"
      p:url="classpath:reports/resultsPdfFormat.jrxml"
      p:reportDataKey="datasource">
    <property name="headers">
        <props>
            <prop key="Content-Disposition">
                attachment; filename=results.pdf
            </prop>
        </props>
    </property>
</bean>
@RequestMapping(value = "/results-pdf", method = RequestMethod.GET)
@ResponseBody
public ModelAndView generateResultsPdf(@RequestParam("year") String year) {

    List<Student> studentList = studentService.getResultsByYear(year);
    JRDataSource jrDataSource = new JRBeanCollectionDataSource(studentList);
    Map<String, Object> parameterMap = new HashMap<>();
    parameterMap.put("title", "Results table"));
    parameterMap.put("datasource", jrDataSource);

    return new ModelAndView("resultsPdf", parameterMap);
}
@RequestMapping(value=“/results pdf”,method=RequestMethod.GET)
@应答器
公共模型和视图生成器结果SPDF(@RequestParam(“年”)字符串年){
List studentList=studentService.getResultsByYear(年);
JRDasource JRDasource=新的JRBeanCollectionDataSource(学生列表);
Map参数Map=newhashmap();
parameterMap.put(“标题”、“结果表”);
parameterMap.put(“数据源”,jrDataSource);
返回新的ModelAndView(“resultsPdf”,parameterMap);
}
目前它运转良好。下载文件的名称为

results.pdf

现在,我想将year参数附加到文件名中,使其读作

结果(u YEAR.pdf)


有什么想法吗?提前谢谢。

我想出了解决这件事的办法。我们可以通过更改generateResultsPdf方法来完成任务,而不是声明bean

@RequestMapping(value = "/results-pdf", method = RequestMethod.GET)
@ResponseBody
public void generateResultsPdf(@RequestParam("year") String year, HttpServletResponse response) {

    List<Student> studentList = studentService.getResultsByYear(year);
    JRDataSource jrDataSource = new JRBeanCollectionDataSource(studentList);
    Map<String, Object> parameterMap = new HashMap<>();
    parameterMap.put("title", "Results table"));
    parameterMap.put("datasource", jrDataSource);

    try {
            JasperReport jasperReport = JasperCompileManager.compileReport(RESULTS_PDF_REPORT_PATH);
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameterMap, jrDataSource);

            String filename = "new-filename.pdf";

            response.setContentType("application/pdf");
            response.addHeader("Content-disposition", "attachment; filename=" +filename);
            OutputStream outputStream = response.getOutputStream();

            JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream);
        } catch (JRException | IOException e) {
            logger.error("Error in generating pdf : {}", e);
        }
}
@RequestMapping(value=“/results pdf”,method=RequestMethod.GET)
@应答器
public void generateResultsPdf(@RequestParam(“year”)字符串year,HttpServletResponse){
List studentList=studentService.getResultsByYear(年);
JRDasource JRDasource=新的JRBeanCollectionDataSource(学生列表);
Map参数Map=newhashmap();
parameterMap.put(“标题”、“结果表”);
parameterMap.put(“数据源”,jrDataSource);
试一试{
JasperReport JasperReport=JasperCompileManager.compileReport(结果\u PDF\u报告\u路径);
JasperPrint JasperPrint=JasperFillManager.fillReport(jasperReport,parameterMap,jrDataSource);
String filename=“new filename.pdf”;
response.setContentType(“application/pdf”);
response.addHeader(“内容处置”、“附件;文件名=“+filename”);
OutputStream OutputStream=response.getOutputStream();
jaspeexportmanager.exportReportToPdfStream(jasperPrint,outputStream);
}捕获(JR异常| IOE异常){
logger.error(“生成pdf时出错:{}”,e);
}
}