中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

排查使用EasyPoi的示例分析

發布時間:2021-09-10 13:36:42 來源:億速云 閱讀:160 作者:柒染 欄目:大數據

本篇文章給大家分享的是有關排查使用EasyPoi的示例分析,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

排查使用EasyPoi:

//這個是調用indexScoreMonitoringService的一個方法返回DTO,這個DTO就是封裝了需要導出excel的數據
List<ScoreCollinearityParentClassDTO> 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的示例分析,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泉州市| 夏河县| 龙口市| 昂仁县| 夏津县| 辽中县| 蓬安县| 巢湖市| 申扎县| 曲阜市| 黄浦区| 平南县| 贺州市| 韩城市| 巩留县| 静安区| 蒙城县| 亳州市| 霍邱县| 绥中县| 鹿泉市| 清河县| 嘉黎县| 陆川县| 南安市| 凉城县| 台北县| 比如县| 内黄县| 德惠市| 东兰县| 昆山市| 澄城县| 无为县| 陕西省| 庆安县| 沾益县| 南京市| 万载县| 若羌县| 巴里|