在使用EasyExcelUtil导出导入文件时,因涉及到部分字段数据字典的转换,所以在项目中自定义了转换器,如下:
public class CustomDictionaryConverter implements Converter<String> {
@Resource
public DictionaryCacheConfig dictionaryCacheConfig;
private static DictionaryCacheConfig cacheConfig;
public CustomDictionaryConverter() {
}
public Class<?> supportJavaTypeKey() {
return String.class;
}
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@PostConstruct
private void shower() {
cacheConfig = this.dictionaryCacheConfig;
}
public WriteCellData<?> convertToExcelData(WriteConverterContext<String> context) {
//就是通过字段名读取字典配置,将key转换成value进行导出
try {
String key = "" + context.getValue();
if (StringUtils.isBlank(key)){
return new WriteCellData("-");
}
String field = context.getContentProperty().getField().getName();
field = StringUtils.mappingOrToUnderlineCase(field);
String dictionaryValue = null;
try {
dictionaryValue = cacheConfig.getDictionaryValue(field, key);
} catch (Exception var6) {
dictionaryValue = "-";
}
return new WriteCellData(dictionaryValue);
} catch (Throwable var7) {
throw var7;
}
}
}
在实体类字段上加了ExcelProperty注解指定了转换规则
@ExcelProperty(value = "表头字段",converter = CustomDictionaryConverter.class)
导出的时候正常使用。
结果,在导入的时候,报错:
com.alibaba.excel.exception.ExcelDataConvertException: Convert data com.alibaba.excel.metadata.data.ReadCellData@e6bbf3cb to class java.lang.String error
at com.alibaba.excel.util.ConverterUtils.doConvertToJavaObject(ConverterUtils.java:183)
at com.alibaba.excel.util.ConverterUtils.convertToJavaObject(ConverterUtils.java:121)
at com.alibaba.excel.util.ConverterUtils.convertToJavaObject(ConverterUtils.java:87)
Caused by: java.lang.UnsupportedOperationException: The current operation is not supported by the current converter.
at com.alibaba.excel.converters.Converter.convertToJavaData(Converter.java:46)
at com.alibaba.excel.converters.Converter.convertToJavaData(Converter.java:57)
at com.alibaba.excel.util.ConverterUtils.doConvertToJavaObject(ConverterUtils.java:181)
但是,断点的时候看,数据确实已经读取到了
又仔细进入代码看异常是哪里抛出来的。
发现是Converter接口中的抛出异常
既然我的自定义转换类实现了这个接口,那就在类中重写这个方法,让这个方法不抛出异常即可
根据报错信息提示 ReadCellData 转换异常,所以,果断选择第一个方法进行重写
@Override public String convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty,
GlobalConfiguration globalConfiguration) throws Exception {
return Converter.super.convertToJavaData(cellData, contentProperty, globalConfiguration);
}
可以看到,这个方法直接调用了Converter中方法抛出了异常。
所以,只需要改写一下return,返回表格中的字符串即可。!
@Override public String convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty,
GlobalConfiguration globalConfiguration) throws Exception {
return cellData.getStringValue();
}