springMVC相關—異常處理

来源:http://www.cnblogs.com/kangxingyue-210/archive/2017/08/25/7425059.html
-Advertisement-
Play Games

一、基於@ExceptionHandler 註解的異常處理方法: 1.加上<mvc:annotation-driven>標簽:(該標簽是標配,開發時一般都攜帶) 2.在當前Handler中定義由@ExceptionHandler註解修飾的方法,用於處理異常信息! @ExceptionHandler( ...


一、基於@ExceptionHandler 註解的異常處理方法: 

 1.加上<mvc:annotation-driven>標簽:(該標簽是標配,開發時一般都攜帶)
    2.在當前Handler中定義由@ExceptionHandler註解修飾的方法,用於處理異常信息!

  @ExceptionHandler(value={異常類型.class})

  @ExceptionHandler(value={異常類型.class,異常類型.class,........})
    註意:
    1.@ExceptionHandler方法修飾的入參中可以加入Exception類型的參數,該參數即對應發生的異常信息 

1         @ExceptionHandler(value={ArithmeticException.class})
2     public String ExcptionHandler(Exception ex) {
3         System.out.println(ex);
4         return "error";
5     }
6 //Exception ex作為入參,可以顯示異常對象信息到控制台
示例

    2.@ExceptionHandler方法的入參中不能傳入Map.若希望把異常信息傳到頁面上,需要使用ModelAndView作為方法的返回值。(也不可以用model)

 1 類中:
 2         @ExceptionHandler(value={ArithmeticException.class})
 3     public ModelAndView ExcptionHandler(Exception ex) {
 4         ModelAndView mv=new ModelAndView();
 5         mv.setViewName("error");
 6         mv.addObject("exception", ex);
 7         return mv;
 8     }
 9 錯誤頁面:
10     <h1>這是一個錯誤頁面!</h1>
11     ${exception }
示例

    3.@ExceptionHandler 註解定義的方法優先順序問題:
    例如發 生的是NullPointerException,但是聲明的異常有 RuntimeException 和 Exception,此候會根據異常的最近 繼承關係找到繼承深度最淺的那個 @ExceptionHandler 註解方法,即標記了 RuntimeException 的方法

 1  @ExceptionHandler(value={Exception.class})
 2       public void ExcptionHandler1() {
 3           System.out.println("發生異常");    
 4           
 5       }
 6       
 7       @ExceptionHandler(value={ArithmeticException.class})
 8       public String ExcptionHandler() {
 9           System.out.println("發生異常");
10          return "error";
11      }
12      
13      @RequestMapping(value="/testException")
14      public String testException(@RequestParam(value="i") Integer i) {
15          System.out.println(10/i);
16          return "success";
17      }  
18  //註解上的運行異常類型與實際的異常類型比較,運行最準確的哪個(範圍小,最貼近)執行異常處理 
@ExceptionHandler註解多異常方法處理

    4.ExceptionHandlerMethodResolver 內部若找不 到@ExceptionHandler 註解的話,會找@ControllerAdvice 中的@ExceptionHandler 註解方法 

對所有的handler異常信息處理:

 1 @ControllerAdvice
 2 public class HandlerException {
 3     
 4     @ExceptionHandler(value={ArithmeticException.class})
 5     public String handleException() {
 6         
 7         return "error";
 8     }
 9 }
10 //所有Handler的ArithmeticException異常均會經過上面函數來進行統一處理
全局異常處理

 註意:

  在程式執行處理類中有異常處理方法的話,遇到異常程式會優先走本類中的異常處理方法,

    若是沒有的話,則會找@ControllerAdvice 註解類中的@ExceptionHandler 註解方法。

    1、@ControllerAdvice 註解類:處理全局異常。

    2、異常處理:總是優先走本類中方法。

 

 1 jsp頁面中:
 2 <a href="${pageContext.request.contextPath }/testException?i=2">異常處理</a>
 3 同一類中:
 4        @ExceptionHandler(value={ArithmeticException.class})
 5     public String ExcptionHandler() {
 6         System.out.println("發生異常");
 7         return "error";
 8     }
 9     
10     @RequestMapping(value="/testException")
11     public String testException(@RequestParam(value="i") Integer i) {
12         System.out.println(10/i);
13         return "success";
14     }  
15 //將網址上i =2改為i =0時發生異常,通過註解的方法轉到error頁面! 
@ExceptionHandler異常處理基礎示例

 

二、基於配置的異常處理:
    如果希望對所有異常進行統一處理,可以使用 SimpleMappingExceptionResolver,它將異常類名映射為 視圖名,即發生異常時使用對應的視圖報告異常     

 1  <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
 2             <!-- 指定在在request域中獲取異常信息所需要的key:即ex -->
 3             <property name="exceptionAttribute" value="ex"></property>
 4             <!-- 指定異常映射 -->
 5             <property name="exceptionMappings">
 6             <!-- property常用語鍵和值均為字元串類型 -->
 7                 <props>
 8                    <!--  由prop標簽的key屬性指定發生異常的全類名,由值指定出現異常去哪個頁面! -->
 9                     <prop key="java.lang.ArithmeticException">error</prop>
10                 </props>
11             </property>
12         </bean>    
異常處理配置信息

 


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

-Advertisement-
Play Games
更多相關文章
  • 現在,你有一個MVC架構的web項目,你要完成一個註冊功能。 前臺傳了3個值到你的控制器,分別是賬號、密碼、郵箱。 如圖:現在你要在控制器裡面判斷,賬號名稱、密碼、郵箱不能為空,並且名稱和密碼不超過16位。 上面這個圖只是個理想中的小例子,實際開發情況是,可能一次性要傳十幾個欄位甚至更多。 那麼在實 ...
  • Int.ToString(format): 格式字元串採用以下形式:Axx,其中 A 為格式說明符,指定格式化類型,xx 為精度說明符,控制格式化輸出的有效位數或小數位數,具體如下: 格式說明符 說明 示例 輸出 C 貨幣 2.5.ToString("C") ¥2.50 D 十進位數 25.ToSt ...
  • C# 2.0 引入了局部類型的概念。局部類型允許我們將一個類、結構或介面分成幾個部分,分別實現在幾個不同的.cs文件中。局部類型適用於以下情況:(1) 類型特別大,不宜放在一個文件中實現。(2) 一個類型中的一部分代碼為自動化工具生成的代碼,不宜與我們自己編寫的代碼混合在一起。(3) 需要多人合作編 ...
  • 在日常開發過程中,不可避免的涉及到數據加密解密(Hash)操作,所以就有想法開發通用工具,NETCore.Encrypt就誕生了。目前NETCore.Encrypt只支持.NET Core ,工具包含了AES,RSA加密解密,MD5,SHA*,HMAC*等常用Hash操作。 ...
  • 單利模式 確保一個類只有一個實例,並提供一個訪問它的全局訪問點 下麵用代碼來實現: /// <summary> /// 單利模式類 /// /// </summary> public class interest { /// <summary> /// 定義一個單利鎖 /// </summary> ...
  • 一個簡單小實例 首先將word要綁定的地方放入占位符 通過谷歌瀏覽器打開該word格式化為xml,也可以通過更改擴展名。(最終目的實現生成的xml文件與word文件,只要更改擴展名就能互相展示) 後臺代碼 ...
  • 聲明:本人無意侵犯原作者的版權,這裡可下載的文檔都屬於作者自行開放下載的,統一放置在這裡是因為不可預測的原因使得原文檔和代碼不方便下載,故將我所收集的內容統一在這裡,如果這裡的內容侵犯了別人,請告知我會第一時間刪除,謝謝理解。 Java編程思想(英文第1版)+源代碼 Java編程思想(英文第2版) ... ...
  • 寫這篇文章的目的是想總結一下自己這麼多年來使用java的一些心得體會,主要是和一些java基礎知識點相關的,所以也希望能分享給剛剛入門的Java程式員和打算入Java開發這個行當的準新手們,希望可以給大家一些經驗,能讓大家更好學習和使用Java。 這次介紹的主要內容是和J2SE相關的部分,另外,會在 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...