栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Boot 项目导出Excel表格报错:Can not find ‘Converter‘ support class Date.

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Boot 项目导出Excel表格报错:Can not find ‘Converter‘ support class Date.

1. 问题描述:

Spring Boot 项目导出 Excel 表格

引入的依赖:


    com.alibaba
    easyexcel
    2.2.6

启动服务,调用接口,成功导出 Excel文件,但是文件没有数据,且报错:Can not find ‘Converter‘ support class Date.

2. 原因分析:

点击报错,定位到创建时间字段,剖析报错原因:使用 easyexcel 导出 Excel 表格时候,默认不支持 DateTime 日期格式,所以需要指定 DateTime 类型的字段的日期格式。

3. 问题解决:

解决方法一:

添加注解:

    
    @ColumnWidth(20)
    @ExcelProperty(value = "创建日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

 但是,需要注意的是时间为 null 时(即数据库中该字段存在为空的数据),这种方法就行不通!导出的 Excel 文件依然没有任何内容。

解决方法二(推荐):

1、自定义一个转换器 LocalDateStringConverter

package com.example.excel.utils;

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.LocalDateTime;
import java.time.format.DateTimeFormatter;



public class LocalDateStringConverter implements Converter {
    @Override
    public Class supportJavaTypeKey() {
        return LocalDateTime.class;
    }

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

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

    @Override
    public CellData convertToExcelData(LocalDateTime localDateTime, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String format = formatter.format(localDateTime);
        return new CellData(format);
    }
}

2、修改字段类型为 LocalDateTime 日期格式,并正确添加注解:

    @ColumnWidth(20)
    @ExcelProperty(value = "创建日期", converter = LocalDateStringConverter.class)
    private LocalDateTime createTime;

3、重启服务

    
    @PostMapping("/excelExport")
    public void excelExport(HttpServletResponse response, Driver driver) {
        List list = driverService.list(new QueryWrapper<>(driver));
        List driverExcel = DriverExcelWrapper.build().listVO(list);
        ExcelUtil.export(response, "司机基础信息导出表", "司机基础信息导出表", driverExcel, DriverExcelVO.class);
    }

测试接口,成功导出 Excel 文件~

 注意:

有一个细节也需要注意,如果使用到 wrapper 转换实体,还需要修改对应的实体类中的时间类型为 LocalDateTime,否则导出来的 Excel 表格里面是没有对应的时间数据的!就像这样:

 修改对应的实体类的时间类型:

    
    @TableField("create_time")
    private LocalDateTime createTime;

再次导出 Excel 表格,成功~~~~ 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1020844.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号