项目中的需求:导出功能,且有些字段是需要通过数据库存储的数据字典来进行翻译转换。比如:企业类型,1=生产企业,2=配送企业,3=经营企业,等等。这些映射关系虽然变化频率很低,但也是动态存储在数据库中的。我们不希望将这些映射关系写死在Java代码中。
EasyExcel有个Converter功能,目前看来有两种实现方式:
一种是在@ExcelProperty注解中指定:
@ExcelProperty(value = "创建时间",index = 5,converter = DateTimeConverter.class)
private Date creTime;
一种是注册写处理器的方式,类似于:
public static void export(HttpServletResponse response, List rowList,String fileName,Class clazz,String sheetName) throws IOException {
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
EasyExcel.write(response.getOutputStream(), clazz)
.registerWriteHandler(new CustomCellWriteHandler())
.registerWriteHandler(your converter constructor)//这里可以继续添加其他的转换器或处理器
.sheet(sheetName).doWrite(rowList);
}
这两种方式各自有缺点:
注解方式:这种方式直接使用的话,无法动态维护映射关系。假设我们已经有了映射关系范围,无法通过构造