首頁 > 軟體

Spring MVC專案中的例外處理詳解

2022-06-06 18:00:06

前言

我們在專案的開發中,難免會遇到各種可預知的、不可預知的異常需要處理。每個過程都單獨處理異常,系統的程式碼耦合度高,工作量大且不好統一,維護的工作量也很大。

那麼,能不能將所有型別的例外處理從各處理過程解耦出來,這樣既保證了相關處理過程的 功能較單一,也實現了異常資訊的統一處理和維護?答案是肯定的。下面將介紹Spring MVC是如何處理異常的。

1. 基於設定的簡單例外處理

在SpringMVC中擁有一套非常強大的例外處理機制,SpringMVC通過 HandlerExceptionResolver處理程式的異常,包括請求對映,資料繫結以及目標方法的執行時發生的異常。

SpringMVC提供了一個處理控制器方法執行過程中所出現的異常的介面:

HandlerExceptionResolver,該介面的實現類有:DefaultHandlerExceptionResolver和

SimpleMappingExceptionResolver,下面就來看看如何使用簡單例外處理器來處理異常。

使用 Spring MVC 提供的簡單例外處理器 SimpleMappingExceptionResolver

Spring MVC組態檔

<!--設定例外處理器-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="exceptionMappings">
        <props>
        <!--ArithmeticException算術運算異常:是出現異常的運算條件時,丟擲此異常-->
            <prop key="java.lang.ArithmeticException">error</prop>
        </props>
    </property>
    <property name="exceptionAttribute" value="e"/>
</bean>

注意:

properties的鍵表示處理器方法執行過程中出現的異常

properties的值表示若出現指定異常時,設定一個新的檢視名稱,跳轉到指定頁面

exceptionAttribute屬性設定一個屬性名,將出現的異常資訊在請求域中進行共用

控制器方法

@RequestMapping("/testException")
public String testException(){
    System.out.println(1/0);
    return "success";
}

在該控制器方法中丟擲一個算術運算異常,執行

2. 基於註解的全域性例外處理

@ControllerAdvice:將當前類標識為例外處理的元件,是Spring提供的新註解,它是對Controller的增強,可對 controller中被 @RequestMapping註解的方法加一些邏輯處理;

@ExceptionHandler:用於設定所標識的方法處理的異常,@ExceptionHandler加在ControllerAdvice中,處理全域性異常

ExceptionController 

@ControllerAdvice
public class ExceptionController {
	
    @ExceptionHandler(value = {ArithmeticException.class,NullPointerException.class})
    public String exception(Exception e, Model model){
        model.addAttribute("e",e);
        return "error";
    }
}

@ExceptionHandler的value值可以是陣列,所以可以新增許多可能出現的異常;在該方法中
當出現算數運算異常或空指標異常就會跳轉到我們自己設定的異常頁面,並且展示異常資訊。

error.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>錯誤頁面</title>
</head>
<body>
<h1>error</h1>
    ${e}
</body>
</html>

異常頁面

總結 

到此這篇關於Spring MVC專案中例外處理的文章就介紹到這了,更多相關SpringMVC例外處理內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com