Easyexcel导入导出List类型数据报错:Can not find ‘Converter’ support class Li,的解决方法

问题分析

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());
    }
}

おすすめ

転載: blog.csdn.net/weixin_53902288/article/details/132836147