最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot @ExceptionHandler與@ControllerAdvice異常處理詳解

 更新時間:2022年10月28日 10:13:57   作者:showswoller  
在Spring Boot應(yīng)用的開發(fā)中,不管是對底層數(shù)據(jù)庫操作,對業(yè)務(wù)層操作,還是對控制層操作,都會不可避免的遇到各種可預(yù)知的,不可預(yù)知的異常需要處理,如果每個處理過程都單獨處理異常,那么系統(tǒng)的代碼耦合度會很高,工作量大且不好統(tǒng)一,以后維護(hù)的工作量也很大

前言

如果能將所有類型的異常處理從各層中解耦出來,則既保證了相關(guān)處理過程的功能較單一,也實現(xiàn)了異常信息的統(tǒng)一處理和維護(hù)。幸運(yùn)的是,Spring框架支持這樣的實現(xiàn)。接下來將從自定義error頁面。@ExceptionHandler注解以及@ControllerAdvice3種方式講解Spring Boot應(yīng)用的異常統(tǒng)一處理

具體處理步驟如下:

自定義error頁面

在Spring Boot Web應(yīng)用的src/main/resources/templates 目錄下添加error.html頁面 訪問發(fā)生錯誤或異常時,Spring Boot將自動找到該頁面作為錯誤頁面。Spring Boot為錯誤頁面提供了以下屬性

  • timestamp 錯誤發(fā)生時間
  • status HTTP狀態(tài)碼
  • error 錯誤原因
  • exception 異常的類名
  • message 異常消息
  • errors BindingResult異常里的各種錯誤
  • trace 異常跟蹤信息
  • path 錯誤發(fā)生時請求的URL路徑

1: 創(chuàng)建名為com.ch.ch5_3.exception的包 并在該包中創(chuàng)建名為MyException 具體代碼如下

package com.ch.ch5_3.exception;
public class MyException extends Exception {
	private static final long serialVersionUID = 1L;
	public MyException() {
		super();
	}
	public MyException(String message) {
		super(message);
	}
}

2:創(chuàng)建控制器類TestHandleExceptionController

創(chuàng)建名為com.ch,ch5_3.controller的包 并在該包中創(chuàng)建名為TestHandleExceptionController的控制器類,在該控制器類中,在4個請求處理方法,一個是導(dǎo)航到index.html 另外三個分別拋出不同的異常 部分代碼如下

package com.ch.ch5_3.controller;
import java.sql.SQLException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
    public void db() throws SQLException { 
        throw new SQLException("數(shù)據(jù)庫異常");
    }  
	@RequestMapping("/my")  
    public void my() throws MyException {  
        throw new MyException("自定義異常");
    }
	@RequestMapping("/no")  
    public void no() throws Exception {  
        throw new Exception("未知異常");
    } 
}

3:View視圖頁面

Thymeleaf模板默認(rèn)將視圖頁面放在src/main/resources/templates目錄下。因此我們在src/main/resources/templates 目錄下新建html頁面文件,index.html和error.html

在index.html頁面中 有4個超鏈接請求,3個請求在控制器中有對應(yīng)處理,另一個請求是404錯誤

部分代碼如下

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>index</title>
<link rel="stylesheet" th:href="@{css/bootstrap.min.css}" rel="external nofollow"  rel="external nofollow"  />
<!-- 默認(rèn)訪問 src/main/resources/static下的css文件夾-->
<link rel="stylesheet" th:href="@{css/bootstrap-theme.min.css}" rel="external nofollow"  rel="external nofollow"  />
				<a th:href="@{db}" rel="external nofollow" >處理數(shù)據(jù)庫異常</a><br>
				<a th:href="@{my}" rel="external nofollow" >處理自定義異常</a><br>
				<a th:href="@{no}" rel="external nofollow" >處理未知錯誤</a>
				<hr>
				<a th:href="@{nofound}" rel="external nofollow" >404錯誤</a>
			</div>
		</div>
	</div>
</body>
</html>

error.html頁面部分代碼如下

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>error</title>
<link rel="stylesheet" th:href="@{css/bootstrap.min.css}" rel="external nofollow"  rel="external nofollow"  />
<!-- 默認(rèn)訪問 src/main/resources/static下的css文件夾-->
<link rel="stylesheet" th:href="@{css/bootstrap-theme.min.css}" rel="external nofollow"  rel="external nofollow"  />
</head>
<body>
            <div class="common-hint-word">
                <div th:text="${#dates.format(timestamp,'yyyy-MM-dd HH:mm:ss')}"></div>
                <div th:text="${message}"></div>
                <div th:text="${error}"></div>
            </div>
        </div>
    </div>
</body>
</html>

@ExceptionHandler注解

上面自定義頁面并沒有處理異常,可以使用@ExceptionHandler注解處理異常,如果有一個由該注解修飾的方法,那么當(dāng)任何方法拋出異常時都由它來處理

添加一個注解修飾的方法 具體代碼如下

@ExceptionHandler(value=Excetption.class)
public String handlerException(Exception e){
if(e istanceof SQLException){
return "sql error";
}
else if(e instanceof MYException){
return"myError";
}
else{
return "noerror";
}
}

@ControllerAdvice注解

使用它注解的類時當(dāng)前Spring Boot應(yīng)用中所有類的統(tǒng)一異常處理類,該類中使用@ExceptionHandler注解的方法統(tǒng)一處理異常,不需要在每個Controller中逐一定義異常處理方法,這是因為對所有注解了@ControllerAdvice注解進(jìn)行全局異常處理

創(chuàng)建GlobalExceptionHandlerController的類 具體代碼如下

package com.ch.ch5_3.controller;
import java.sql.SQLException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import com.ch.ch5_3.exception.MyException;
@ControllerAdvice
public class GlobalExceptionHandlerController {
	@ExceptionHandler(value=Exception.class)
	public String handlerException(Exception e) {
		//數(shù)據(jù)庫異常
		if (e instanceof SQLException) {
			return "sqlError";
		} else if (e instanceof MyException) {//自定義異常
			return "myError";
		} else {//未知異常
			return "noError";
		}
	}
}

到此這篇關(guān)于SpringBoot @ExceptionHandler與@ControllerAdvice異常處理詳解的文章就介紹到這了,更多相關(guān)SpringBoot @ExceptionHandler與@ControllerAdvice內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 簡單了解java類的初始化以及類的實例化

    簡單了解java類的初始化以及類的實例化

    這篇文章主要介紹了簡單了解java類的初始化以及類的實例化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Java面向?qū)ο笾惖睦^承介紹

    Java面向?qū)ο笾惖睦^承介紹

    大家好,本篇文章主要講的是Java面向?qū)ο笾惖睦^承介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • 解決Spring?MVC中文亂碼的編碼配置

    解決Spring?MVC中文亂碼的編碼配置

    這篇文章主要為大家介紹了解決SpringMVC中文亂碼的編碼配置示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Stream中的Peek操作代碼

    Stream中的Peek操作代碼

    這篇文章主要介紹了Stream中的Peek操作,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • 深入Java分布式計算的使用分析

    深入Java分布式計算的使用分析

    本篇文章對Java分布式計算的使用進(jìn)行了詳細(xì)的介紹。需要的朋友參考下
    2013-05-05
  • MyBatis中執(zhí)行SQL語句的幾種方式總結(jié)

    MyBatis中執(zhí)行SQL語句的幾種方式總結(jié)

    MyBatis是一個優(yōu)秀的持久層框架,它支持定制化SQL、存儲過程以及高級映射,下面這篇文章主要給大家介紹了關(guān)于MyBatis中執(zhí)行SQL語句的幾種方式,需要的朋友可以參考下
    2024-04-04
  • 通過實例分析java多態(tài)

    通過實例分析java多態(tài)

    這篇文章主要介紹了通過實例分析java多態(tài),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • java實現(xiàn)用戶自動登錄

    java實現(xiàn)用戶自動登錄

    這篇文章主要為大家詳細(xì)介紹了java用戶自動登錄的實現(xiàn)方法,分為六個步驟實現(xiàn)用戶自動登錄,并驗證用戶是否已經(jīng)登錄,感興趣的小伙伴們可以參考一下
    2016-03-03
  • SpringBoot整合Lombok插件與使用詳解

    SpringBoot整合Lombok插件與使用詳解

    Lombok是Java開發(fā)的插件,通過注解自動生成常用代碼,如getter/setter,節(jié)省開發(fā)時間,提高效率,它在編譯期生成方法,不影響性能,安裝Lombok需要添加Maven依賴和IDEA插件,使用注解如@Data、@Getter等簡化代碼編寫,官網(wǎng)提供詳細(xì)文檔
    2024-09-09
  • java調(diào)用python代碼的兩種實現(xiàn)方式:Runtime.exec()和Jython

    java調(diào)用python代碼的兩種實現(xiàn)方式:Runtime.exec()和Jython

    在Java中調(diào)用Python代碼有多種方法,包括使用Runtime.exec()和第三方庫如Jython,Runtime.exec()通過系統(tǒng)命令執(zhí)行Python腳本,適用于簡單的調(diào)用場景,Jython則是一個Python的Java實現(xiàn),允許在Java中直接運(yùn)行Python代碼,適用于更深層次的集成需求
    2025-01-01

最新評論

两当县| 类乌齐县| 甘孜县| 武宁县| 昭苏县| 呼伦贝尔市| 杭锦后旗| 河北区| 吐鲁番市| 彰化县| 香河县| 比如县| 泸西县| 竹北市| 千阳县| 祁阳县| 柘荣县| 大新县| 北川| 岗巴县| 横山县| 老河口市| 鱼台县| 盐山县| 萨迦县| 余干县| 如皋市| 浦北县| 梨树县| 平邑县| 深水埗区| 郁南县| 英吉沙县| 尼玛县| 永丰县| 西乌珠穆沁旗| 双辽市| 绥宁县| 霍邱县| 永仁县| 西乡县|