利用hutool解析excel内容转换为实体,实体属性为空

一、博客前提

工作中有遇到一个需求,客户提供需要插入数据库的原始数据的excel表格,我去解析表格,将数据插入数据库。当时立马就想到了用hutool的工具类,直接将excel表格内容的转换为我需要的实体对象。网上也有写了很多这种类似的博客,可是我在参考网上博客内容去做,利用hutool解析excel内容转换为实体,但是遇到实体属性为空的问题,本篇博客就作为一个工作笔记记录一下。

二、代码实现

1.引入pom

<dependency>
     <groupId>cn.hutool</groupId>
     <artifactId>hutool-all</artifactId>
     <version>5.5.8</version>
</dependency>
<dependency>
     <groupId>org.apache.poi</groupId>
     <artifactId>poi-ooxml</artifactId>
      <version>3.1.7</version>
</dependency>

2、定义excel转换后实体

@Data
public class GoodFavorOfExcel {

    /**
     * 宝贝id
     */
    private Long id;

    /**
     * 总收藏量
     */
    private Integer totalFavor;

    /**
     * 时间
     */
    private String date;

}

3、解析代码

    @PostMapping(value = "getData")
    public Resp indexConvert(@RequestParam("file") MultipartFile file) throws IOException {

        ExcelReader reader = ExcelUtil.getReader(file.getInputStream());
        reader.addHeaderAlias("日期", "date");
        reader.addHeaderAlias("宝贝ID", "id");
        reader.addHeaderAlias("收藏数", "totalFavor");
        List<GoodFavorOfExcel> list =  reader.readAll(GoodFavorOfExcel.class);

        return RespUtil.success();
    }

4、excel表格格式

5、结果展示

到这里展示的内容,就已经将excel里的转换为我需要的实体对象list了

三、问题复现即解决

2、

下面来展示下,我参照网上的博客写代码时遇到的问题

通过和上面的图片对比,我们就可以发现在转换数据的时候,虽然数据大小也是和前面的一样有5126条,但是里面的实体内容确实null,原因是因为

        ExcelReader reader = ExcelUtil.getReader(file.getInputStream());
        List<GoodFavorOfExcel> list =  reader.readAll(GoodFavorOfExcel.class);

没有对ExcelReader对象增加标题别名,导致hutool工具类底层解析时,无法得知那一列的内容是对应实体里的哪一个属性。这也是网上大多数博客没有讲到的地方。hutoll的api也没有讲到这一点:https://www.hutool.cn/docs/#/poi/Excel%E8%AF%BB%E5%8F%96-ExcelReader

2、解决方法

        ExcelReader reader = ExcelUtil.getReader(file.getInputStream());
        reader.addHeaderAlias("日期", "date");
        reader.addHeaderAlias("宝贝ID", "id");
        reader.addHeaderAlias("收藏数", "totalFavor");

解决的方法就是设置标题和别名的对应关系

四、总结

本篇博客仅仅是一个很简单的使用笔记,想要详细了解为什么设置了标题,别名对应关系就可展示数据的读者,可自行查看源码了解原理。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值