成都网站建设设计

将想法与焦点和您一起共享

排查使用EasyPoi的示例分析

本篇文章给大家分享的是有关排查使用EasyPoi的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

10余年的儋州网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整儋州建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“儋州网站设计”,“儋州网站推广”以来,每个客户项目都认真落实执行。

排查使用EasyPoi:

//这个是调用indexScoreMonitoringService的一个方法返回DTO,这个DTO就是封装了需要导出excel的数据
List scoreCollinearityParentClassDTOS = indexScoreMonitoringService.scoreCollinearity(ratingModelReportQuery, indexScoreIdsList, 1);
//调用公司统一封装的EasyPoiUtil工具类下载excel文件
EasyPoiUtil.exportExcel(scoreCollinearityParentClassDTOS, null, EasyPoiUtil.CHART_NAME[cid], ScoreCollinearityExcelDTO.class, EasyPoiUtil.CHART_NAME[cid] + ".xls", response);

下面贴一下该工具类中exportExcel方法的相关描述

/**
 * 功能描述:复杂导出Excel,包括文件名以及表名,不创建表头
 *
 * @author yan
 * @date  2019/8/5 14:11
 * @param list 导出的实体类
 * @param title 表头名称
 * @param sheetName sheet表名
 * @param pojoClass 映射的实体类
 * @param fileName
 * @param response
 * @return
 */

下面在贴一下ScoreCollinearityParentClassDTO的相关代码

private static final long serialVersionUID = 4575184647737532340L;
@Excel(name = "共线性", width = 40 ,orderNum="4")
public   String collinearity;
//......省略下面其他生成set与get的代码
//......

另外我同事说,他在构造DTO的时候其实是用的ScoreCollinearityParentClassDTO的一个子类ScoreCollinearityExcelDTO,所以我把ScoreCollinearityExcelDTO也贴一下。具体封装DTO就不贴了。下面是有关ScoreCollinearityExcelDTO的相关代码

@Excel(name = "日期", width = 40)
private  String month;
@Excel(name = "模型名称", width = 40)
private  String modelName;
@Excel(name = "模块名A~指标名A --- 模块名B~指标名B", width = 40)
private  String ModuleNameIndexName;
//......省略下面其他生成set与get的代码
//......

这里再记录一点,同事事先排查问题的时候,发现导出只有父类的一列值,所以他本地修改了代码,用返回子类集合,然后报空指针异常。所以为了与他本地代码保持一致,我现在我本地修改一下代码。具体修改后的代码我就不贴出来了。就是修改封装DTO的Service返回子类集合,然后用子类集合进行接受。

2.解决问题

上面进行了问题的相关描述。由于代码不多,我先通过肉眼检查一下代码什么地方不对。最后发现ScoreCollinearityExcelDTO中的一个属性定义很不符合规范
排查使用EasyPoi的示例分析
首字母写成了大写。也许是同事在什么地方拷贝过来的,忘记修改了。我先将这个地方改成小写。然后自测一下,发现问题得到了解决。哈哈。感觉好顺利哦。于是我让同事把这个地方改了,提交代码,先把问题解决,不要卡在这儿。

3.跟踪源码,分析原因

问题是解决了。但是为什么呢?我们不能胡乱一懵,将问题解决,就不管了啊。就算当时上班比较忙,也要备注下。事后也要对问题进行分析,找出问题根本问题所在。知道为什么。所以开始我我查看easypoi源码的历程。

我现在我本地将代码还原。然后调试将异常信息打印出来。发现也不是空指针问题啊,尴尬了。 排查使用EasyPoi的示例分析
而且报错也很也很详细,将字段名都描述出来了。难不成我这边跟他那边不一样。 排查使用EasyPoi的示例分析
排查使用EasyPoi的示例分析
很明显,这个获取method没有获取到,为null了。我们这这里打一个断点,进行调试。发现的确为null 排查使用EasyPoi的示例分析
查看getMethods 排查使用EasyPoi的示例分析
返回的是一个map,key为moduleNameIndexName,但传入的是ModuleNameIndexName,当然找不到咯。那么下面我们来看看,这个getMethods是怎么封装的。下面是我一直往上找的相关源码,重点我都标记出来了。 排查使用EasyPoi的示例分析
排查使用EasyPoi的示例分析
排查使用EasyPoi的示例分析
排查使用EasyPoi的示例分析
easypoi底层是通过过去所有的get方法进行封装到Map集合的,key为去掉方法名,去掉get后将首字母小写作为key。所以 getModuleNameIndexName ----> moduleNameIndexName
而获取的时候是通过属性名获取的,这里不管是moduleNameIndexName或ModuleNameIndexName,生成后的get方法相同。所以导致了不对应的问题。

以上就是排查使用EasyPoi的示例分析,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。


本文名称:排查使用EasyPoi的示例分析
网页路径:http://chengdu.cdxwcx.cn/article/jpegjc.html