IDEA 启动
添加pom依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.2</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.18</version>
</dependency>
注解
@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface EasyExcelExport {
/**
* 文件名称
*/
String fileName() default "";
}
饿死配科特
@Aspect
@Component
public class ExcelExportAspect {
/**
* 是否导出
*/
private static final String IS_EXPORT = "IS_EXPORT";
/**
* 导出表头
*/
private static final String TITLE_NAME = "TITLE_NAME";
/**
* 对应字段名
*/
private static final String FIELD_NAME = "FIELD_NAME";
/**
* 附件名称
*/
private static final String FILE_NAME = "FILE_NAME";
@AfterReturning(returning = "obj", value = "@annotation(excelExport)")
public void excelExport(Object obj, EasyExcelExport excelExport) throws IOException {
//获取request与response对象
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = Objects.requireNonNull(attributes).getRequest();
String title = request.getParameter(TITLE_NAME);
String filed = request.getParameter(FIELD_NAME);
//确定是否导出
if (Boolean.parseBoolean(request.getParameter(IS_EXPORT))) {
HttpServletResponse response = Objects.requireNonNull(attributes).getResponse();
//key:表头名 value:字段名
Map<String, Object> exportName = new HashMap<>(16);
//第一种:用户自定义导出,必须保证表头和字段名对应
if (!StringUtils.isEmpty(title) || !StringUtils.isEmpty(request.getHeader(filed))) {
String[] titleLen = title.split(",");
for (int i = 0; i < titleLen.length; i++) {
exportName.put(titleLen[i], filed.split(",")[i]);
}
} else {
Field[] declaredFields = ((PageInfo) ((DataResult) obj).getData()).getList().get(0).getClass().getDeclaredFields();
for (Field declaredField : declaredFields) {
if (!"serialVersionUID".equals(declaredField.getName())) {
ApiModelProperty modelProperty = declaredField.getAnnotation(ApiModelProperty.class);
exportName.put(modelProperty == null ? declaredField.getName() : modelProperty.value(), declaredField.getName());
}
}
}
//处理返回结果集
JSONObject resObj = JSONUtil.parseObj(obj, false);
Object data = resObj.get("data");
if (data instanceof JSONObject) {
JSONArray records = JSONUtil.parseArray(JSONUtil.parseObj(data).get("list"));
String fileName = URLEncoder.encode("".equals(excelExport.fileName()) ? UUID.randomUUID().toString() : excelExport.fileName(), StandardCharsets.UTF_8.name()).replaceAll("\\+", "%20");
if (!StringUtils.isEmpty(request.getParameter(FILE_NAME))) {
fileName = request.getParameter(FILE_NAME);
}
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8");
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ExcelTypeEnum.XLSX.getValue());
List<List<Object>> dataList = EasyExcelUtil.dataList(exportName, records);
EasyExcelFactory.write(response.getOutputStream()).sheet("Sheet1").registerWriteHandler(new IEasyExcelHandler()).head(EasyExcelUtil.headList(exportName)).doWrite(dataList);
}
}
}
}
使用方式
@MyLog(title = "分页查询", action = "分页查询")
@ApiOperation(value = "分页查询", notes = "分页查询")
@PostMapping("/queryRectifyList")
@EasyExcelExport
public DataResult queryRectifyList(@RequestBody HiddenRectifyInfoQueryBO queryBO) {
return DataResult.success(hiddenRectifyInfoService.queryRectifyList(queryBO));
}
前端使用方式
curl --request POST \
--url 'http://localhost:18084/risk/hiddenRectify/queryRectifyList?TITLE_NAME=隐患发现时间,所属企业,整改标题&FIELD_NAME=registTime,companyName,dangerName&FILE_NAME=隐患治理表格&IS_EXPORT=true' \
--header 'Authorization: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIyZxxxxxx' \
--header 'content-type: application/json' \
--data '{
"pageNum": 1,
"pageSize": 10
}'