亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

排查使用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

额尔古纳市| 昭平县| 定南县| 兴山县| 江山市| 左权县| 元江| 西畴县| 绥中县| 鹿泉市| 湖北省| 静海县| 汝州市| 瓮安县| 米泉市| 兴和县| 磐石市| 平阴县| 安阳市| 叙永县| 遂宁市| 宣恩县| 宜城市| 广德县| 济源市| 阿鲁科尔沁旗| 镇安县| 成安县| 泸水县| 盈江县| 开封市| 额济纳旗| 山阳县| 夏邑县| 新竹县| 高州市| 嘉定区| 思茅市| 宜昌市| 绥德县| 突泉县|