1. 程式人生 > >SpringMvc學習筆記(十)異常處理專題

SpringMvc學習筆記(十)異常處理專題

遇見異常跳轉到自己設定的頁面,註解方式處理區域性異常,監聽Controller類的全域性異常處理,springmvc配置統一的簡單異常處理,監聽所有的頁面異常

1.專案結構

2.區域性異常處理

ExceptionDemoController.java

package com.hs.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.GetMapping;
import
org.springframework.web.servlet.ModelAndView; /** * 經典異常處理_註解方式 */ @Controller public class ExceptionDemoController { @GetMapping("/ex01") public String test01() { int i = 10 / 0; //會報這個錯誤Request processing failed; nested exception is java.lang.ArithmeticException: / by zero return "jsp/result"
; } /** * 註解方式,處理異常,程式遇見這個異常,就會執行註解裡的內容, *作用範圍只有本類有效!!! * @return */ //裡面可以寫多個異常,用,隔開,,,其實也可以總的寫一個異常Exception,class @ExceptionHandler(value = {ArithmeticException.class}) public ModelAndView exception01(ArithmeticException ex) { ModelAndView mav = new ModelAndView(); mav.addObject("ex"
, ex); mav.setViewName("jsp/error"); return mav; } }

error.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
   <title>Title</title>
</head>
<body>
<h2>${requestScope.message}</h2>
<a href="javascript:void(0)" id="debug">[DEBUG]</a>
<p id="error" style="display: none">
   ${requestScope.ex}
</p>
<script>
    window.onload = function () {
        document.getElementById("debug").onclick = function () {
           document.getElementById("error").style.display = "block";
        }
    }
</script>
</body>
</html>

[email protected]監聽所有Controller類的異常

ExceptionAllController.java

package com.hs.web;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import java.util.HashMap;
import java.util.Map;

/**
 * ControllerAdvice這個表示監聽只要有Controller的類的異常,同樣如果自身類有註解監聽,滿足誰近就執行誰的原則
 */
@ControllerAdvice
public class ExceptionAllController {

   /**
    * 監聽Controller類的異常方式一
    *
    * @param ex
    * @return
    */
   @ExceptionHandler(value = {Exception.class})
   public ModelAndView exception01(Exception ex) {
      ModelAndView mav = new ModelAndView();

      mav.addObject("ex", ex);

      mav.setViewName("jsp/error02");
      return mav;
   }
}

ExceptionDemoController.java把上面那個區域性處理異常註釋就行,

error02.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
   <title>Title</title>
</head>
<body>
本頁是全域性的異常監聽跳轉頁面,本次監聽到的異常是
${requestScope.ex}

</body>
</html>

4.springmvc.xml配置簡單處理異常

springmvc.xml加入

<!--6.統一的簡單異常處理,監聽所有的頁面異常-->
<bean id="simpleMappingExceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
   <!--出現異常,預設跳轉的頁面-->
   <property name="defaultErrorView" value="jsp/error"/>
   <!--類似於這個mav.addObject("ex", ex);-->
   <property name="exceptionAttribute" value="ex"/>
   <!--異常對映,若出現下列異常,就跳轉相應的頁面,不跳預設的-->
   <property name="exceptionMappings">
      <props>
         <prop key="ArithmeticException">jsp/error</prop>
         <prop key="ArrayIndexOutOfBoundsException">jsp/error</prop>
         <prop key="RuntimeException">jsp/error</prop>
         <prop key="Exception">jsp/error</prop>
      </props>
   </property>
</bean>

5.自定義處理異常

ExceptionAllController.java

/**
    * 監聽Controller類的異常方式二自定義異常
    * @param ex
    * @param model
    * @return
    */
   @ExceptionHandler(value = {Exception.class})
   public String exception02(Exception ex, Model model) {
      //判斷類的型別
      if (ex instanceof ArrayIndexOutOfBoundsException) {
         model.addAttribute("message", "陣列越界異常");//給客戶看的
         model.addAttribute("ex", ex);
//       return "jsp/error";
      }

      if (ex instanceof ArithmeticException) {
         model.addAttribute("message", "運算異常");    //給客戶看的
         model.addAttribute("ex", ex);
//       return "jsp/error";
      }

      //處理自定義異常
      return "jsp/error";
   }

   /**
    * 監聽Controller類的異常方式二自定義異常____返回json格式
    * @param ex
    * @return
    */
   @ExceptionHandler(value = {Exception.class})
   @ResponseBody
   public Map<String,Object> exception03(Exception ex) {
      Map<String, Object> map = new HashMap<String,Object>();
      //判斷類的型別
      if (ex instanceof ArrayIndexOutOfBoundsException) {
         map.put("message", "陣列越界異常");//給客戶看的
         map.put("ex", ex);
//       return "jsp/error";
      }

      if (ex instanceof ArithmeticException) {
         map.put("message", "運算異常");    //給客戶看的
         map.put("ex", ex);
//       return "jsp/error";
      }

      //處理自定義異常
      return map;
   }

result.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
   <title>Title</title>
</head>
<body>
沒有遇見註解裡的異常,成功跳轉
</body>
</html>

相關推薦

SpringMvc學習筆記異常處理專題

遇見異常跳轉到自己設定的頁面,註解方式處理區域性異常,監聽Controller類的全域性異常處理,springmvc配置統一的簡單異常處理,監聽所有的頁面異常 1.專案結構 2.區域性異常處理 ExceptionDemoControll

springmvc學習筆記29——HandleException處理異常

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

《瘋狂Java講義》學習筆記異常處理

1、異常概述 異常機制已經成為判斷一門程式語言是否成熟的標準,目前主流的程式語言都提供了成熟的異常機制,增加了異常處理機制後的程式有更好的容錯性,更加健壯 Java的異常機制主要依賴於:try、catch、finally、throws和throw Java7

JNI學習筆記——異常處理

我們已經碰到過在一個JNI函式呼叫後,native程式碼進行錯誤檢查的情形。本節解釋native程式碼如何從這些錯誤條件中檢查和恢復。 我們將關注發生錯誤的JNI函式呼叫上(而不是native程式碼上的二進位制錯誤)。如果一個native方法有呼叫了一個系統呼叫,只需要簡

SpringMVC學習筆記——包裝型別pojo、陣列、集合的引數繫結

部落格原始碼下載:戳我一下 一、包裝型別pojo引數繫結 需求: 商品查詢controller方法中實現商品查詢條件傳入。 1、包裝型別的pojo public class Ite

springmvc學習筆記30——@ResponseStatus註解處理異常

一、ResponseStatus修飾類 ResponseStatus註解的使用非常簡單,我們建立一個異常類,加上註解 import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotat

springmvc學習筆記33——SimpleMappingExceptionResolver異常對映 XML檔案配置

SimpleMappingException異常對映 當異常發生時,我們可以將它對映到我們指定的介面 在springmvc中配置   <!-- 配置使用 SimpleMappingExceptionResolver 來對映異常 -->    

springmvc學習筆記30——SimpleMappingExceptionResolver異常對映

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Python學習筆記——處理Excel電子表格

安裝openpyxl模組 pip install openpyxl 讀取Excel檔案 用openpyxl模組開啟Excel文件 >>> wb = openpyxl.load_workbook('temp.x

springmvc學習筆記 -- 從零搭建,基礎入門

out hand char webapp core localhost list ges del 1、新建maven項目 參考mybatis學習筆記(五) -- maven+spring+mybatis從零開始搭建整合詳細過程(上)第一部分,修改配置 2、修

如鵬網學習筆記DOM

check 名稱 元素節點 n) mousedown 通過 name 邏輯 css DOM筆記一、DOM簡介   Document Object Model 文檔對象模型   DOM的節點樹模型:整個文檔按照從大到小的節點劃分,每一個內容都算作一個節點   DOM API

Python學習筆記

類型 property 獲取 bsp 構造 屬性 增加 函數類 pro 一、類和構造函數的定義   class 類名(object):    def __init__(self,name,score):      self.name = name      self.sco

Ionic3學習筆記實現夜間模式功能

gpa 效果 app code fff eat ext images provider 本文為原創文章,轉載請標明出處 目錄 創建主題樣式 導入 variables.scss 創建 provider 創建 page 在 App 入口處應用主題 效果圖 1. 創建主題樣式

Elasticsearch學習筆記批量查詢mget、批量增刪改bulk

出錯 color body 換行 nor test 增刪 doc document 一、批量查詢 mget GET /_mget { "docs":[ { "_index":"ecommerce

day5-Python學習筆記常用模塊

stat 結果 fig .get 文件顯示 刪除空文件 conf std 分割 import os# print(os.getcwd())#取當前工作目錄# print(os.chdir("..")) # 更改當前目錄# print(os.getcwd())#取當前工作目

《Qt5 開發與實例第三版學習筆記

fix row tac person als new .cpp exec constrain 1 // 3.5 『綜合實例』 修改用戶資料 2 //main.cpp 3 #include "content.h" 4 #include <QApplic

SpringBoot學習筆記5處理前端JSON返回的日期的格式

處理 date() ring row 學習筆記 post 直觀 val rtt SpringBoot學習筆記(4):處理前端JSON返回的日期的格式 問題描述   前端頁面顯示的時間為毫秒格式,不利於直觀顯示! 解決方法1——後端解決 public class Flow

ASP.NET Core 2 學習筆記視圖

部分 合成 cati 分享 col script text var AC ASP.NET Core MVC中的Views是負責網頁顯示,將數據一並渲染至UI包含HTML、CSS等。並能痛過Razor語法在*.cshtml中寫渲染畫面的程序邏輯。本篇將介紹ASP.NET Co

官網英文版學習——RabbitMQ學習筆記RabbitMQ集群

sign 新版本 兩種 height node 停止 clas 普通模式 簡單 在第二節我們進行了RabbitMQ的安裝,現在我們就RabbitMQ進行集群的搭建進行學習,參考官網地址是:http://www.rabbitmq.com/clustering.

Rx 學習筆記8錯誤處理和 To 操作符

con 錯誤處理 操作 operator 處理 opera erro per tor Error Handling Operators Catch Retry Operators to Convert Observables ToRx 學習筆記(8)錯誤處理和 To 操作符