Easyexcel-Import und -Export. Datenfehler beim Listentyp: „Konverter“-Unterstützungsklasse Li kann nicht gefunden werden, Lösung

Problemanalyse

EasyExcel unterstützt standardmäßig keine automatische Konvertierung von Daten vom Typ „Liste“. Wenn die Entitätsklasse Daten vom Typ „Liste“ übergibt, müssen Sie daher manuell eine Konvertierungsklasse schreiben, um die Datenkonvertierung zu erreichen. Andernfalls wird ein Fehler gemeldet: „Konverter“ kann nicht gefunden werden ' Unterstützungsklassenliste

Lösung: Schreiben Sie die Konvertierungsklasse für den Listentyp manuell

Entitätsklassenobjekt DTO, das zum Empfangen von Parametern verwendet wird

/**
* value:对应的excel表头
* converter :自己手动编写的类型转换类
*/
@ExcelProperty(value = "标签",converter = MyConverter.class)
private List<String> label;

Die Objektdomäne der Entitätsklasse, die der Datenbanktabelle entspricht. Informationen zur Datenkonvertierung vom Typ „List“ und „String“ finden Sie im Artikel: Zugreifen auf List<String>-Daten in MySQL

/**
* 由于数据库不支持List数据类型,因此需要用String类型来存储List类型数据
*/
private String label;

Das für Ausgabeparameter verwendete Entitätsklassenobjekt VO wird normalerweise verwendet, um die aus der Datenbank erhaltenen Daten zu verarbeiten und an das Frontend zurückzugeben.

/**
* value:对应的excel表头
* converter :自己手动编写的类型转换类
*/
@ExcelProperty(value = "标签",converter = MyConverter.class)
private List<String> label;

Die benutzerdefinierte Konvertierungsklasse muss die Schnittstelle Converter<T> implementieren

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

Supongo que te gusta

Origin blog.csdn.net/weixin_53902288/article/details/132836147
Recomendado
Clasificación