Spring Boot中Web應用的統一異常處理

2021-09-22 04:16:31 字數 1520 閱讀 7733

我們在做web應用的時候,請求處理過程中發生錯誤是非常常見的情況。spring boot提供了乙個預設的對映:/error,當處理中丟擲異常之後,會轉到該請求中處理,並且該請求有乙個全域性的錯誤頁面用來展示異常內容。

選擇乙個之前實現過的web應用(chapter3-1-2)為基礎,啟動該應用,訪問乙個不存在的url,或是修改處理內容,直接丟擲異常,如:

public string hello() throws exception

此時,可以看到類似下面的報錯頁面,該頁面就是spring boot提供的預設error對映頁面。

alt=預設的錯誤頁面

雖然,spring boot中實現了預設的error對映,但是在實際應用中,上面你的錯誤頁面對使用者來說並不夠友好,我們通常需要去實現我們自己的異常提示。

下面我們以之前的web應用例子為基礎(chapter3-1-2),進行統一異常處理的改造。

@controlleradvice

class globalexceptionhandler

}

啟動該應用,訪問:http://localhost:8080/hello,可以看到如下錯誤提示頁面。

alt=自定義的錯誤頁面

通過實現上述內容之後,我們只需要在controller中丟擲exception,當然我們可能會有多種不同的exception。然後在@controlleradvice類中,根據丟擲的具體exception型別匹配@exceptionhandler中配置的異常型別來匹配錯誤對映和處理。

在上述例子中,通過@controlleradvice統一定義不同exception對映到不同錯誤處理頁面。而當我們要實現restful api時,返回的錯誤是json格式的資料,而不是html頁面,這時候我們也能輕鬆支援。

本質上,只需在@exceptionhandler之後加入@responsebody,就能讓處理函式return的內容轉換為json格式。

下面以乙個具體示例來實現返回json格式的異常處理。

public class errorinfo
public class myexception extends exception 

}

@controller

public class hellocontroller

}

@controlleradvice

public class globalexceptionhandler

}

本文完整示例:chapter3-1-6

SpringBoot中的響應式web應用

在spring 5中,spring mvc引入了webflux的概念,webflux的底層是基於reactor netty來的,而reactor netty又使用了reactor庫。本文將會介紹在spring boot中reactive在webflux中的使用。前面我們講到了,webflux的基礎是...

springboot(二) 在Web中開發應用

springboot中靜態資源訪問 在開發web應用的時候,需要引用大量的js css 等靜態資源。spring boot預設提供靜態資源目錄位置需置於classpath下,目錄名需符合如下規則 static public resources meta inf resources 啟動程式後訪問路徑...

springboot 渲染web頁面

spring boot提供了預設配置的模板引擎主要有以下幾種 注意 避免使用jsp,jsp無法實現spring boot的多種特性 org.springframework.bootgroupid spring boot starter webartifactid dependency org.spr...