溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

排查使用EasyPoi的示例分析

發(fā)布時(shí)間:2021-09-10 13:36:42 來(lái)源:億速云 閱讀:149 作者:柒染 欄目:大數(shù)據(jù)

本篇文章給大家分享的是有關(guān)排查使用EasyPoi的示例分析,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

排查使用EasyPoi:

//這個(gè)是調(diào)用indexScoreMonitoringService的一個(gè)方法返回DTO,這個(gè)DTO就是封裝了需要導(dǎo)出excel的數(shù)據(jù)
List<ScoreCollinearityParentClassDTO> scoreCollinearityParentClassDTOS = indexScoreMonitoringService.scoreCollinearity(ratingModelReportQuery, indexScoreIdsList, 1);
//調(diào)用公司統(tǒng)一封裝的EasyPoiUtil工具類下載excel文件
EasyPoiUtil.exportExcel(scoreCollinearityParentClassDTOS, null, EasyPoiUtil.CHART_NAME[cid], ScoreCollinearityExcelDTO.class, EasyPoiUtil.CHART_NAME[cid] + ".xls", response);

下面貼一下該工具類中exportExcel方法的相關(guān)描述

/**
 * 功能描述:復(fù)雜導(dǎo)出Excel,包括文件名以及表名,不創(chuàng)建表頭
 *
 * @author yan
 * @date  2019/8/5 14:11
 * @param list 導(dǎo)出的實(shí)體類
 * @param title 表頭名稱
 * @param sheetName sheet表名
 * @param pojoClass 映射的實(shí)體類
 * @param fileName
 * @param response
 * @return
 */

下面在貼一下ScoreCollinearityParentClassDTO的相關(guān)代碼

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

另外我同事說(shuō),他在構(gòu)造DTO的時(shí)候其實(shí)是用的ScoreCollinearityParentClassDTO的一個(gè)子類ScoreCollinearityExcelDTO,所以我把ScoreCollinearityExcelDTO也貼一下。具體封裝DTO就不貼了。下面是有關(guān)ScoreCollinearityExcelDTO的相關(guān)代碼

@Excel(name = "日期", width = 40)
private  String month;
@Excel(name = "模型名稱", width = 40)
private  String modelName;
@Excel(name = "模塊名A~指標(biāo)名A --- 模塊名B~指標(biāo)名B", width = 40)
private  String ModuleNameIndexName;
//......省略下面其他生成set與get的代碼
//......

這里再記錄一點(diǎn),同事事先排查問(wèn)題的時(shí)候,發(fā)現(xiàn)導(dǎo)出只有父類的一列值,所以他本地修改了代碼,用返回子類集合,然后報(bào)空指針異常。所以為了與他本地代碼保持一致,我現(xiàn)在我本地修改一下代碼。具體修改后的代碼我就不貼出來(lái)了。就是修改封裝DTO的Service返回子類集合,然后用子類集合進(jìn)行接受。

2.解決問(wèn)題

上面進(jìn)行了問(wèn)題的相關(guān)描述。由于代碼不多,我先通過(guò)肉眼檢查一下代碼什么地方不對(duì)。最后發(fā)現(xiàn)ScoreCollinearityExcelDTO中的一個(gè)屬性定義很不符合規(guī)范
排查使用EasyPoi的示例分析
首字母寫成了大寫。也許是同事在什么地方拷貝過(guò)來(lái)的,忘記修改了。我先將這個(gè)地方改成小寫。然后自測(cè)一下,發(fā)現(xiàn)問(wèn)題得到了解決。哈哈。感覺(jué)好順利哦。于是我讓同事把這個(gè)地方改了,提交代碼,先把問(wèn)題解決,不要卡在這兒。

3.跟蹤源碼,分析原因

問(wèn)題是解決了。但是為什么呢?我們不能胡亂一懵,將問(wèn)題解決,就不管了啊。就算當(dāng)時(shí)上班比較忙,也要備注下。事后也要對(duì)問(wèn)題進(jìn)行分析,找出問(wèn)題根本問(wèn)題所在。知道為什么。所以開(kāi)始我我查看easypoi源碼的歷程。

我現(xiàn)在我本地將代碼還原。然后調(diào)試將異常信息打印出來(lái)。發(fā)現(xiàn)也不是空指針問(wèn)題啊,尷尬了。 排查使用EasyPoi的示例分析
而且報(bào)錯(cuò)也很也很詳細(xì),將字段名都描述出來(lái)了。難不成我這邊跟他那邊不一樣。 排查使用EasyPoi的示例分析
排查使用EasyPoi的示例分析
很明顯,這個(gè)獲取method沒(méi)有獲取到,為null了。我們這這里打一個(gè)斷點(diǎn),進(jìn)行調(diào)試。發(fā)現(xiàn)的確為null 排查使用EasyPoi的示例分析
查看getMethods 排查使用EasyPoi的示例分析
返回的是一個(gè)map,key為moduleNameIndexName,但傳入的是ModuleNameIndexName,當(dāng)然找不到咯。那么下面我們來(lái)看看,這個(gè)getMethods是怎么封裝的。下面是我一直往上找的相關(guān)源碼,重點(diǎn)我都標(biāo)記出來(lái)了。 排查使用EasyPoi的示例分析
排查使用EasyPoi的示例分析
排查使用EasyPoi的示例分析
排查使用EasyPoi的示例分析
easypoi底層是通過(guò)過(guò)去所有的get方法進(jìn)行封裝到Map集合的,key為去掉方法名,去掉get后將首字母小寫作為key。所以 getModuleNameIndexName ----> moduleNameIndexName
而獲取的時(shí)候是通過(guò)屬性名獲取的,這里不管是moduleNameIndexName或ModuleNameIndexName,生成后的get方法相同。所以導(dǎo)致了不對(duì)應(yīng)的問(wèn)題。

以上就是排查使用EasyPoi的示例分析,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI