Alibaba/EasyExce踩坑 Can not find ‘Converter‘ support class ZoneDateTime

报错:alibaba.excel.exception.ExcelDataConvertException: Can not find ‘Converter‘ support class ZoneDateTime

主要原因是 Converter接口的convertToExcelData没有对 ZoneDateTime的时间类型进行转换。需要手动转换一下。

导出Excel文件的需要在实体类属性上添加@ExcelProperty注解,当实体类属性存在 ZonedDateTime 的类型时,会导出失败。

添加一个ZoneDateTimeConverter类,实现Converter<>接口

package com.geekbang.source_spring.config;

import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

/**
 * alibaba-EasyExcel导出excel的时候,当时间类型为ZoneDateTime的时候,导出失败.
 * 主要原因是因为 Converter接口的convertToExcelData没有对 ZoneDateTime的时间类型进行转换. 这里进行一个手动转换.
 */
public class ZoneDateTimeConverter implements Converter<ZonedDateTime> {

    @Override
    public Class<ZonedDateTime> supportJavaTypeKey() {
        return ZonedDateTime.class;
    }

    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }

    @Override
    public ZonedDateTime convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) {
        return ZonedDateTime.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }

    /**
     * CellData 对象报错. 这里需要降低jar包依赖,此处使用了 2.2.7版本的 com.alibaba-easyexcel 依赖
     *
     * @param zonedDateTime        ZonedDateTime
     * @param excelContentProperty ExcelContentProperty
     * @param globalConfiguration  GlobalConfiguration
     * @return CellData
     */
    @Override
    public CellData<?> convertToExcelData(ZonedDateTime zonedDateTime, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) {
        String format = zonedDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        return new CellData<>(format);
    }
}

这里同时还要注意使用 2.2.7 版本的com.alibaba-easyexcel 依赖,否则CellData对象会报错。

在 ZonedDateTime 类型的属性上配置的@ExcelProperty 注解中添加属性 converter = ZoneDateTimeConverter.class

@ExcelProperty(value = "createTime", index = 9, converter = ZoneDateTimeConverter.class)
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT-8")
private ZonedDateTime createTime;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值