我使用Spring Boot,Spring Data REST,Jasper Report(6.x)。 我创建了一个REST控制器,它应该在磁盘上导出PDF报告并返回一个" ok"字符串到客户端。因此,它与用户通常的用例有点不同,用户将PDF发送回客户端。
根据最佳做法,我使用了此回复的解决方案4:https://stackoverflow.com/a/27532493/2012635用于"正常"将PDF返回给客户的用例:
@RequestMapping(value = "/refunds/{id}/export", method = RequestMethod.GET)
public ModelAndView exportPdf(@PathVariable("id") Long id, HttpServletRequest request, Locale locale) throws Exception {
Refund refund = refundRepository.findOne(id);
if (refund != null) {
ModelMap model = new ModelMap();
model.addAttribute("datasource", new JREmptyDataSource(1));
model.addAttribute("model", refund);
return new ModelAndView("RefundPdfView-IT", model);
} else {
throw new ResourceNotFoundException();
}
}
这种方法非常简洁,我在属性文件中的映射:
#REFUND
RefundPdfView-IT.(class)=org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView
RefundPdfView-IT.url=classpath:/reports/accounting/refunds/Refund-IT.jrxml
我想知道我是否可以重复使用这种方法将PDF保存在服务器的磁盘上,而不是将其发送回客户端。 我想重用已定义的映射而不对报告的位置和名称进行硬编码。
一些建议将不胜感激。
答案 0 :(得分:1)
我想指出的第一件事是您将需要JasperExportManager。 exportReportToPdfFile(JasperPrint,jasperPrint,java.lang.StringdestFileName) 将文件本地保存在服务器中。
从您的用例来看,尚不清楚为什么要将文件保存在服务器中,我觉得应该保存搜索参数,而不是保存文件。这样,当您单击参数时,您将再次获取/生成pdf文件。
或者您应该在服务器中使用curl并使用参数调用所需的网址