easyExcel导出一直报错org.apache.poi.ss.usermodel.Cell.setCellValue(Ljava/time/LocalDateTime

文章讲述了在业务中遇到的日期和性别字段从数据库导出时的问题,如日期不是标准格式,性别用0、1表示。提出了创建Converter类进行转换的方法,例如创建`SupplierDateConverter`来格式化日期,以及`SupplierThree2OneConverter`将数字转换为“是”或“否”。此外,还提及了MapStruct的类似用法,并提示了使用Swagger测试导出的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异常解决

出现场景:业务中常出现的日期,从库中查询出的时间往往不能直接导出;性别男女啦,库中存的往往是“0”、“1”;

很多网上例子是在日期直接在实体类中标注,比如

在这里插入图片描述
这样直接转换往往会报如标题的错误
org.apache.poi.ss.usermodel.Cell.setCellValue(Ljava/time/LocalDateTime

比较常见的做法是写一个类,专门做转换。

比如日期格式转换;Converter<T> ,其中T表示转换前的字段类型;

@Data
public class SupplierDateConverter implements Converter<Date> {

	// 需要的日期格式(我们需要的日期样式)
    private static final String PATTERN_YYYY_MM_DD = "yyyy-MM-dd";

    @Override
    public Class<?> supportJavaTypeKey() {
        return Converter.super.supportJavaTypeKey();
    }

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

	 /**
     * @param value               库中的数据,即目标转换的字段
     * @param contentProperty
     * @param globalConfiguration
     * @return
     * @throws Exception
     */
    @Override
    public WriteCellData<?> convertToExcelData(Date value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_YYYY_MM_DD);
        String dateValue = sdf.format(value);
        return new WriteCellData<>(dateValue);
    }
}

比如性别字段的转换

@Data
public class SupplierThree2OneConverter implements Converter<String> {

    /**
     * 0表示:是
     */
    private static final String THREECERTIFICATES = "0" ;
    /**
     * 1表示:否
     */
    private static final String NO_THREECERTIFICATES = "1";

    @Override
    public Class<?> supportJavaTypeKey() {
        //实体类中对象属性类型
        return String.class;
    }

    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        // Excel中对应的CellDate属性类型
        return CellDataTypeEnum.STRING;
    }

    /**
     * @param value              
     * @param contentProperty
     * @param globalConfiguration
     * @return
     * @throws Exception
     */
    @Override
    public WriteCellData<?> convertToExcelData(String value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        if (THREECERTIFICATES.equals(value)) {
            return new WriteCellData<>("是");
        } else if (NO_THREECERTIFICATES.equals(value)) {
            return new WriteCellData<>("否");
        }
        return null;
    }
}

另外,mapstruct用法与此相似

  1. 测试导出注意事项
    • 用swagger测导出,返回一串乱七八糟的
    • 用postman测试,一切都使用默认配置,不需要配请求头之类。但是运行时需要注意,点这个
      在这里插入图片描述
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值