SpringBoot 處理異常的幾種常見姿勢

2021-10-04 00:28:03 字數 3576 閱讀 7157

新建異常資訊實體類

非必要的類,主要用於包裝異常資訊。

/**

*/public

class

errorresponse

public

errorresponse

(string errortypename, string message)..

....省略getter/setter方法

}

自定義異常型別

一般我們處理的都是 runtimeexception ,所以如果你需要自定義異常型別的話直接整合這個類就可以了。

/**

* 自定義異常型別

*/public

class

resourcenotfoundexception

extends

runtimeexception

public

resourcenotfoundexception

(string message)

@override

public string getmessage()

public

void

setmessage

(string message)

}

新建異常處理類

我們只需要在類上加上@controlleradvice註解這個類就成為了全域性異常處理類,當然你也可以通過 assignabletypes指定特定的 controller 類,讓異常處理類只處理特定類丟擲的異常。

/**

*/@controlleradvice

(assignabletypes =

)@responsebody

public

class

globalexceptionhandler

else

if(e instanceof

resourcenotfoundexception

)return null;

}}

controller模擬丟擲異常

/**

* @author shuang.kou

*/@restcontroller

("/api"

)public

class

exceptioncontroller

("/resourcenotfoundexception"

)public

void

throwexception2()

}

使用 get 請求 localhost:8080/api/resourcenotfoundexception[1] (curl -i -s -x get url),服務端返回的 json 資料如下:

編寫測試類

mockmvc 由org.springframework.boot.test包提供,實現了對http請求的模擬,一般用於我們測試 controller 層。

/**

*/@autoconfiguremockmvc

@springboottest

public

class

exceptiontest

@test

void

should_return_404_if_resourse_not_found()

throws exception

}

@exceptionhandler 處理 controller 級別的異常

我們剛剛也說了使用@controlleradvice註解 可以通過 assignabletypes指定特定的類,讓異常處理類只處理特定類丟擲的異常。所以這種處理異常的方式,實際上現在使用的比較少了。

@exceptionhandler

(value = exception.

class

)// 攔截所有異常

public responseentity

exceptionhandler

(exception e)

else

if(e instanceof

resourcenotfoundexception

)return null;

}

responsestatu***ception

研究 responsestatu***ception 我們先來看看,通過 responsestatus註解簡單處理異常的方法(將異常對映為狀態碼)。

}使用 get 請求 localhost:8080/api/resourcenotfoundexception2[2] ,服務端返回的 json 資料如下:

這種通過 responsestatus註解簡單處理異常的方法是的好處是比較簡單,但是一般我們不會這樣做,通過responsestatu***ception會更加方便,可以避免我們額外的異常類。

("/resourcenotfoundexception2"

)public

void

throwexception3()

使用 get 請求 localhost:

8080

/api/resourcenotfoundexception2[

3] ,服務端返回的 json 資料如下,和使用 responsestatus 實現的效果一樣:

responsestatu***ception 提供了三個構造方法:

建構函式中的引數解釋如下:

springboot的異常處理

1 預設規則 預設情況下,spring boot提供 error處理所有錯誤的對映 對於機器客戶端,它將生成json響應,其中包含錯誤,http狀態和異常訊息的詳細資訊。對於瀏覽器客戶端,響應乙個 whitelabel 錯誤檢視,以html格式呈現相同的資料 瀏覽器預設錯誤頁面 非瀏覽器客戶端預設響...

springBoot異常處理

使得訪問 exception一定會產生異常 some exception controller public class exceptioncontroller return hello 再寫個全域性異常處理類 controlleradvice public class globalexceptio...

Spring Boot 處理異常

原理 略 1 在template下建立error目錄,在error目錄中,建立404.html頁面,如果發生錯誤 為404,就會去找這個頁面 可以建立所有的狀態碼頁面 2 在error目錄中,建立4xx.html頁,如果找不到對應的狀態碼頁面,就會去找4xx.html頁面 注意4xx.html就是4...