我在Spring中有一个现有的Rest API,该API返回响应。我要为此添加文件下载。正确的做法是什么?
这就是我现在得到的:
@CrossOrigin
@ResponseStatus(HttpStatus.OK)
@PostMapping(value = "/program/{programId}/reportType/{reportType}", consumes = "application/json")
public ApiResponse<Object> executeReport(@PathVariable("programId") String programId,
@PathVariable("reportType") String reportType, @RequestBody ReportDTO reportDTO, HttpServletResponse response) {
List<Map<String, Object>> report = reportBuilderService.generateReportFromReportDTO(reportDTO);
try {
getDownload(reportType, report, response);
} catch (IOException e) {
e.printStackTrace();
}
return new ApiResponse<>(APIResponseKey.ALL_GOOD, report, null);
}
//My new function for the file download part.
public void getDownload(String reportType, List<Map<String, Object>> report, HttpServletResponse response)
throws IOException {
byte[] reportContents = service.writeFile(reportType, report).getBytes();
response.addHeader("Content-Disposition", "attachment; filename=" + reportType + ".csv");
response.setContentType("text/csv; charset=UTF-8");
response.setContentLength(reportContents.length);
ServletOutputStream out = response.getOutputStream();
out.write(reportContents);
}