easyexcel填坑-自定義異常處理

来源:https://www.cnblogs.com/ztfcb/archive/2023/03/10/17204267.html
-Advertisement-
Play Games

3.0版本以前listener中拋出的所有異常都會被easyexcel捕獲,並且包裝成ExcelAnalysisException,寫法如下: private void parseXmlSource(InputStream inputStream, ContentHandler handler) { ...


3.0版本以前listener中拋出的所有異常都會被easyexcel捕獲,並且包裝成ExcelAnalysisException,寫法如下:

private void parseXmlSource(InputStream inputStream, ContentHandler handler) {
        InputSource inputSource = new InputSource(inputStream);
        try {
            SAXParserFactory saxFactory;
            String xlsxSAXParserFactoryName = xlsxReadContext.xlsxReadWorkbookHolder().getSaxParserFactoryName();
            if (StringUtils.isEmpty(xlsxSAXParserFactoryName)) {
                saxFactory = SAXParserFactory.newInstance();
            } else {
                saxFactory = SAXParserFactory.newInstance(xlsxSAXParserFactoryName, null);
            }
            saxFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
            saxFactory.setFeature("http://xml.org/sax/features/external-general-entities", false);
            saxFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
            SAXParser saxParser = saxFactory.newSAXParser();
            XMLReader xmlReader = saxParser.getXMLReader();
            xmlReader.setContentHandler(handler);
            xmlReader.parse(inputSource);
            inputStream.close();
        } catch (ExcelAnalysisException e) {
            throw e;
        } catch (Exception e) {
            throw new ExcelAnalysisException(e);
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    throw new ExcelAnalysisException("Can not close 'inputStream'!");
                }
            }
        }
    }

3.1.5版本對此做了優化,只會包裝指定的異常,代碼如下:

   private void parseXmlSource(InputStream inputStream, ContentHandler handler) {
        InputSource inputSource = new InputSource(inputStream);
        try {
            SAXParserFactory saxFactory;
            String xlsxSAXParserFactoryName = xlsxReadContext.xlsxReadWorkbookHolder().getSaxParserFactoryName();
            if (StringUtils.isEmpty(xlsxSAXParserFactoryName)) {
                saxFactory = SAXParserFactory.newInstance();
            } else {
                saxFactory = SAXParserFactory.newInstance(xlsxSAXParserFactoryName, null);
            }
            try {
                saxFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
            } catch (Throwable ignore) {}
            try {
                saxFactory.setFeature("http://xml.org/sax/features/external-general-entities", false);
            } catch (Throwable ignore) {}
            try {
                saxFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
            } catch (Throwable ignore) {}
            SAXParser saxParser = saxFactory.newSAXParser();
            XMLReader xmlReader = saxParser.getXMLReader();
            xmlReader.setContentHandler(handler);
            xmlReader.parse(inputSource);
            inputStream.close();
        } catch (IOException | ParserConfigurationException | SAXException e) {
            throw new ExcelAnalysisException(e);
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    throw new ExcelAnalysisException("Can not close 'inputStream'!");
                }
            }
        }
    }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 客觀的理解DDD DDD,即領域驅動設計,不僅帶給我們一套新的概念,還提供了一套全新的設計思路,應用在構建大型複雜軟體系統之上。 相對於DDD,我們使用的傳統的設計思路,常被稱為數據驅動設計,常被應用於中小型的項目。互聯網的項目,往往是快速迭代,起初一個小項目,慢慢會演化為一個中大型的項目,在演化過 ...
  • 在 Web 應用程式中(通俗點,可以理解成一個網站),Session 和 Cookie 是兩個非常重要的概念,主要用於實現用戶身份認證、數據傳遞等功能。今天就來講講這兩個東西。 ...
  • CF鏈接:Almost Identity Permutations Luogu鏈接:Almost Identity Permutations $ {\scr \color {Aquamarine}{\text{Solution}}} $ 前言 這好像是一道能用數學秒掉的題目 但由於我喜歡DP過菜,我 ...
  • 2.HelloSpring 思考問題? Hello對象是誰創建的? Hello對象是由Spring設置的 Hello 對象的屬性是怎麼設置的? Hello 對象的屬性是Spring容器設置的 這個過程就叫控制反轉 控制:誰來控制對象的創建,傳統應用程式的對象是由程式本身控制創建的,使用Spring後 ...
  • 哈嘍大家好 今天給大家分享一個用Python開發一款飛翔的小鳥游戲。 飛翔的小鳥(游戲英文名:Flappy Bird) 一款由越南獨立開發者開發的手機游戲,是之前非常流行的一款手機游戲 小游戲目標:讓小鳥穿過管子,不要碰到任何物體,挑戰更遠距離 今天,就讓我們一起用python來複刻一下這款游戲吧! ...
  • SpringBoot 文件上傳+攔截器 文件上傳原理 表單的enctype屬性規定在發送到伺服器之前應該如何對錶單數據進行編碼。 當表單的enctype="application/x-www-form-urlencoded"(預設)時,form表單中的數據格式為:key=value&key=valu ...
  • 我可以明確地回答.我們之所以選擇Postgres,是因為它在操作上比MySQL更可靠,而當時公司的創始人相信SQL資料庫的可移植性. 隨著年份的發展,我們發現了這一點,我們發現基本上,Postgres是Rough中的這款鑽石,它具有一系列功能和一個開發社區,這是我們見過的最不可思議的開源項目之一,並 ...
  • Lua語言線上運行編譯,是一款可線上編程編輯器,在編輯器上輸入Lua語言代碼,點擊運行,可線上編譯運行Lua語言,Lua語言代碼線上運行調試,Lua語言線上編譯,可快速線上測試您的Lua語言代碼,線上編譯Lua語言代碼發現是否存在錯誤,如果代碼測試通過,將會輸出編譯後的結果。 該線上工具由IT寶庫提 ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...