使用easyExcel导入导出Date类型的转换问题

起因:在业务需求上需要将Excel表中的日期导入,存储到数据库中,但是entity中的日期类型使用Date来接收,这样导致时间精确到秒。这时,即使使用@DateTimeFormat("yyyy-MM-dd")也无法成功转换,会报如下错误:

Convert data com.alibaba.excel.metadata.data.ReadCellData@a8b42f88 to class java.util.Date error

如果使用LocalDate也会报类型转换异常

解决方案:

步骤一:自定义转换器

package com.wedu.modules.dossier.common;

import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.converters.WriteConverterContext;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Date转换类
 * @author Hou
 * @create 2023/8/23 10:15
 */
public class DateConverter implements Converter {
    private static  final String PATTERN_YYYY_MM_DD = "yyyy-MM-dd HH:mm:ss";


    @Override
    public Class supportJavaTypeKey() {
        return Date.class;
    }

    /**
     * easyExcel导出数据类型转换
     * @param cellData
     * @param contentProperty
     * @param globalConfiguration
     * @return
     * @throws Exception
     */
    @Override
    public Date convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        String value = cellData.getStringValue();
        SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_YYYY_MM_DD);
        Date parse = sdf.parse(value);
        return parse;
    }

    /**
     * easyExcel导入Date数据类型转换
     * @param context
     * @return
     * @throws Exception
     */
    @Override
    public WriteCellData convertToExcelData(WriteConverterContext context) throws Exception {
        Date date = context.getValue();
        if (date == null) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_YYYY_MM_DD);
        return new WriteCellData<>(sdf.format(date));
    }

}

 进行数据转换后就可以对easyExcel进行导入导出操作了。

如果需要多个其他的日期转换格式,那么按需求定义另外的类就行。

步骤二:在entity中对应的属性上添加@ExcelProperty注解,并在注解的converter属性中加入所写的转换器类,如下图所示:

使用easyExcel导入导出Date类型的转换问题_第1张图片

 

你可能感兴趣的:(oracle,数据库,easyExcel)