参考资料:(我在写的时候加入了当前项目里前任的用法)
https://www.cnblogs.com/janson071/p/10119935.html
返回值:
return new ResponseEntity<>(bytes, headers, HttpStatus.CREATED);
构造器--org.springframework.http
public ResponseEntity(T body, MultiValueMap<String, String> headers, HttpStatus status) {
super(body, headers);
Assert.notNull(status, "HttpStatus must not be null");
this.statusCode = status;
}
涉及大量对ResponseEntity对思考和使用:
可以参考----虽然个人感觉意义不大,还不如在使用时直接百度需要的结果,而不是一大堆方法.
HttpStatus(状态码)https://blog.csdn.net/csdn1844295154/article/details/78980174
HttpHeaders(消息头:请求头和响应头)https://www.cnblogs.com/honghong87/articles/6941436.html
在当前项目中使用到的:
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", XLSX_NAME);
HttpStatus.CREATED
枚举
并不专属于这部分功能,一个熟练的枚举使用者,应当像这里的HttpStatus一样,而不是仅仅将枚举作为常量的存放库
----方法的参数类型就应当是枚举
模版的动态填充
1.原模版文件的输入
HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls;
XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx;
SXSSFworkbook:从POI 3.8版本开始,提供了一种基于XSSF的低内存占用的API----SXSSF
当数据量超出65536条后,在使用HSSFWorkbook或XSSFWorkbook,程序会报OutOfMemoryError:
Javaheap space;内存溢出错误。这时应该用SXSSFworkbook。
try (InputStream inputStream = ByteSource.wrap(resource).openStream()) {
try (XSSFWorkbook workbook = new XSSFWorkbook(inputStream)) {
}
} catch (IOException ex) {
log.error("createDownloadExcelTemplate fill excel", ex);
}
2.表格解析
// 默认取第一个子表
xssfSheet = xssfWorkbook.getSheetAt(0);
//默认第一行为标题行,index = 0
XSSFRow titleRow = xssfSheet.getRow(0);
//每个单元格(cell)的数据
XSSFCell xssfCell = xssfRow.getCell(cellIndex);
//创建工作表
xssfSheet = xssfWorkbook.createSheet();
//创建单元格,单元格的属性是字符串
sheet.getRow(0).createCell(1, CellType.STRING);
3.返回与关闭
workbook.write(outputStream);
byte[] bytes = outputStream.toByteArray();
try {
outputStream.close();
} catch (IOException e) {
log.error("createDownloadExcelTemplate close stream", e);
}