EasyExcel, Can not find 'Converter' support class xxx

334 阅读1分钟

使用 EasyExcel 进行 Excel 读写时,报错:Can not find 'Converter' support class xxx. 默认的Converter无法转xxx类,需要自己写个Converter

我遇到的问题是,查询到的list中有个字段private List<PlatformRole> roleList,报错无法解析JSONArray

解决办法:添加自定义Converter,自己转换JSONArray

import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import com.alibaba.fastjson2.JSONArray;

public class ExcelJSONArrayStringConverter implements Converter<JSONArray> {

    @Override
    public Class<JSONArray> supportJavaTypeKey() {
        return JSONArray.class;
    }

    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }

    @Override
    public WriteCellData<?> convertToExcelData(JSONArray jsonArray, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        return new WriteCellData<>(jsonArray.toJSONString());
    }
}

再把ExcelJSONArrayStringConverter,注册到ExcelWriter

// 写入文件流,这里是写入到response的输出流,也可以写入到文件流,也可以写入到其他流中
ExcelWriterBuilder write = response != null ? EasyExcel.write(response.getOutputStream()) : EasyExcel.write(fileName);
// 支持JSONArray字段,直接转成String
write.registerConverter(new ExcelJSONArrayStringConverter());