一、获取分页查询结果
@GetMapping("/exportAuditLog")
@PreAuthorize("hasRole('HIT_FINANCE')")
public void export(AuditEventLogSearchRequest auditrequest, @OTPCodeInfo OneTimeCode oneTimeCode,
SessionStatus status, HttpServletResponse response) throws Exception {
Assert.notNull(oneTimeCode, "one time code can't empty or null");
oneTimeCode.validationOtpCode();
int curPage = auditrequest.getCurPage();
int pageSize = auditrequest.getPageSize();
String principal = auditrequest.getPrincipal();
String timemin = auditrequest.getTimemin();
String timemax = auditrequest.getTimemax();
String type = auditrequest.getType();
// params
Map<String, String> params = new HashMap<>();
params.put("principal", principal);
params.put("timemin", timemin);
params.put("timemax", timemax);
params.put("type", type);
// page
BasePage page = new BasePage();
page.setCurPage(curPage);
page.setPageSize(pageSize);
// add sort
List<Sort.Order> orderList = new ArrayList<>();
if (auditrequest.getCompositors() != null && auditrequest.getCompositors().size() != 0) {
for (Compositor compositor : auditrequest.getCompositors()) {
Sort.Order orders = new Sort.Order(compositor.getDirection(), compositor.getProperty());
orderList.add(orders);
}
}
else {
Sort.Order order = Sort.Order.desc("timeStamp");
orderList.add(order);
}
Pageable pageable = PageRequest.of(curPage, pageSize, Sort.by(orderList));
// get audit content
Page<Audit> auditContent = auditTrailLogService.searchAuditTrailLog(params, pageable);
List<Audit> auditlogcontent = auditContent.getContent();
二、设置CSV 文件格式
String filename = "Auditlogload.csv";
HttpHeaders headers = new HttpHeaders();
// 下载显示的文件名,解决中文名称乱码问
String downloadFielName = new String(filename.getBytes("UTF-8"), "UTF-8");
// 通知浏览器以attachment(下载方式)打开图片
headers.setContentDispositionFormData("attachment", downloadFielName);
// application/octet-stream 二进制流数据(最常见的文件下载)
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
String utf = "UTF-8";
response.setContentType("application/ms-excel.numberformat:@");
response.setCharacterEncoding(utf);
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "max-age=30");
response.setHeader("Content-Disposition", "attachment; filename=" + downloadFielName);
process(auditlogcontent, response);
public void process(List<Audit> datalist, HttpServletResponse response) throws IOException {
OutputStream output = response.getOutputStream();
CsvWriter csvWriter = new CsvWriter(output, ',', Charset.forName("UTF-8"));
String[] tableheader = { "Date Time", "User Name", "Event", "Log Details" };
csvWriter.writeRecord(tableheader);
for (Audit data : datalist) {
String[] arr = new String[4];
arr[0] = data.getTimeStamp();
arr[1] = data.getPrincipal();
arr[2] = data.getType();
arr[3] = data.getData();
csvWriter.writeRecord(arr);
}
csvWriter.close();
output.close();
}
注:所用API
compile group: 'net.sourceforge.javacsv', name: 'javacsv', version: '2.0'