Easyexcel导入导出List类型数据报错:Can not find ‘Converter’ support class Li,的解决方法
easyexcel
快速、简洁、解决大文件内存溢出的java处理Excel工具
项目地址:https://gitcode.com/gh_mirrors/ea/easyexcel
免费下载资源
·
问题分析
Easyexcel默认是不支持List类型数据自动转换的,因此当实体类传递数据为List类型时需要手动编写转换类来实现数据转换,否则会报错:Can not find ‘Converter’ support class List
解决方法---手动编写List类型转换类
用于接收参数的实体类对象DTO
/**
* value:对应的excel表头
* converter :自己手动编写的类型转换类
*/
@ExcelProperty(value = "标签",converter = MyConverter.class)
private List<String> label;
和数据库表对应的实体类对象domain,关于List类型数据和String类型数据转换可以参考文章:在MySQL中存取List<String>数据
/**
* 由于数据库不支持List数据类型,因此需要用String类型来存储List类型数据
*/
private String label;
用于输出参数的实体类对象VO,通常用于对从数据库中获取的数据进行加工处理后返回给前端
/**
* value:对应的excel表头
* converter :自己手动编写的类型转换类
*/
@ExcelProperty(value = "标签",converter = MyConverter.class)
private List<String> label;
自定义转换类,需要实现接口Converter<T>
public class MyConverter implements Converter<List> {
@Override
public Class<?> supportJavaTypeKey() {
return List.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
/**
* 读(导入)数据时调用
*/
@Override
public List convertToJavaData(ReadConverterContext<?> context) {
//当字段使用@ExcelProperty(converter = MyConverter.class)注解时会调用
//context.getReadCellData().getStringValue()会获取excel表格中该字段对应的String数据
//这里可以对数据进行额外的加工处理
String stringValue = context.getReadCellData().getStringValue();
//将数据转换为List类型然后返回给实体类对象DTO
return Collections.singletonList(stringValue);
}
/**
* 写(导出)数据时调用
*/
@Override
public WriteCellData<?> convertToExcelData(WriteConverterContext<List> context) {
//当字段使用@ExcelProperty(converter = MyConverter.class)注解时会调用
//context.getValue()会获取对应字段的List类型数据
//这里是将List<String>转换为String类型数据,根据自己的数据进行处理
StringJoiner joiner = new StringJoiner(",");
for (Object data : context.getValue()) {
joiner.add((CharSequence) data);
}
//然后将转换后的String类型数据写入到Excel表格对应字段当中
return new WriteCellData<>(joiner.toString());
}
}
GitHub 加速计划 / ea / easyexcel
16
5
下载
快速、简洁、解决大文件内存溢出的java处理Excel工具
最近提交(Master分支:5 个月前 )
c42183df
Bugfix 5 个月前
efa7dff6 * 重新加回 `commons-io`
5 个月前
更多推荐
已为社区贡献9条内容
所有评论(0)