springboot全域性異常處理

2021-09-29 20:01:35 字數 4687 閱讀 1701

@controlleradvice

public

class

myexceptionhandler

}

上述的示例中,我們對捕獲的異常進行簡單的二次處理,返回異常的資訊,雖然這種能夠讓我們知道異常的原因,但是在很多的情況下來說,可能還是不夠人性化,不符合我們的要求。

那麼我們這裡可以通過自定義的異常類以及列舉類來實現二次封裝。

1、自定義基礎介面類

public

inte***ce

baseerrorinfointe***ce

2、自定義列舉類

public

enum commonenum implements

baseerrorinfointe***ce

@override

public string getresultcode()

@override

public string getresultmsg()

}

3、自定義異常類

public

class

bizexception

extends

runtimeexception

public

bizexception

(baseerrorinfointe***ce errorinfointe***ce)

public

bizexception

(baseerrorinfointe***ce errorinfointe***ce, throwable cause)

public

bizexception

(string errormsg)

public

bizexception

(string errorcode, string errormsg)

public

bizexception

(string errorcode, string errormsg, throwable cause)

public string geterrorcode()

public

void

seterrorcode

(string errorcode)

public string geterrormsg()

public

void

seterrormsg

(string errormsg)

public string getmessage()

@override

public throwable fillinstacktrace()

}

4、自定義資料格式

public

class

resultbody

public

resultbody

(baseerrorinfointe***ce errorinfo)

public string getcode()

public

void

setcode

(string code)

public string getmessage()

public

void

setmessage

(string message)

public object getresult()

public

void

setresult

(object result)

/** * 成功

* * @return

*/public

static resultbody success()

/** * 成功

* @param data

* @return

*/public

static resultbody success

(object data)

/** * 失敗

*/public

static resultbody error

(baseerrorinfointe***ce errorinfo)

/** * 失敗

*/public

static resultbody error

(string code, string message)

/** * 失敗

*/public

static resultbody error

( string message)

@override

public string tostring()

}

5、自定義全域性異常處理類

@controlleradvice

public

class

globalexceptionhandler

",e.

geterrormsg()

);return resultbody.

error

(e.geterrorcode()

,e.geterrormsg()

);}/**

* 處理空指標的異常

/** * 處理其他異常

}

6、接下來,我們就來測試了,建乙個萬能的實體類user和乙個控制類

public

class

user

implements

serializable

public

intgetid()

public

void

setid

(int id)

public string getname()

public

void

setname

(string name)

public

intgetage()

public

void

setage

(int age)

public string tostring()

}

控制層使用restful風格實現的crud,不同的是這裡我故意弄出了一些異常,好讓這些異常**獲到然後處理。這些異常中,有自定義的異常丟擲,也有空指標的異常丟擲,當然也有不可預知的異常丟擲(這裡我用型別轉換異常代替),那麼我們在完成**編寫之後,看看這些異常是否能夠**獲處理成功吧!

@restcontroller

(value =

"/api"

)public

class

userrestcontroller

return

true;}

("/user"

)public

boolean

update

(@requestbody user user)

("/user"

)public

boolean

delete

(@requestbody user user)

("/user"

)public list

findbyuser

(user user)

}

(1)查詢操作,get http://localhost:8181/api/user

返回引數:,

看到程式正常返回,並沒有被影響。

(2)插入操作:post http://localhost:8181/api/user

body引數:

返回引數:

(3)更新操作:put http://localhost:8181/api/user

body引數:

返回引數:

注意:此處**本應該是空指標異常,但是根據返回引數,此處是由自定義的全域性異常進行捕獲了,可以得出全域性異常處理優先處理子類的異常。

(4)刪除操作:delete http://localhost:8181/api/user

body引數:

返回引數:

這裡可以看到它使用了我們在自定義全域性異常處理類中的exception異常處理的方法。

全域性異常處理 springBoot 全域性異常處理

先讚後看,月入百萬 springboot開發的web專案中,強調分層的概念,乙個完整的專案一般會劃分出controller層和service層。因此,為了 的可維護性,controller層 應該盡量簡潔,驗證一下引數,直接丟給service層處理即可 異常處理的方式無外乎兩種 在springboo...

springboot全域性異常捕獲

新專案中需要用到檔案上傳,有需要對上傳檔案大小進行限制,當檔案超過限制的時候,springboot框架會直接丟擲異常,不會進入你的方法中,當我們需要向前臺返回資訊的時候也無從返回,只能進行全域性捕獲檔案過大的異常,然後再返回資訊。controlleradvice public class mycon...

SpringBoot全域性異常處理

簡介通常在controller層需要去捕獲service層的異常,防止返回一些不友好的錯誤資訊到客戶端,但如果controller層每個方法都用模組化的try catch 去捕獲異常,會很難看也難維護,所以使用全域性異常比較方便 這方法是springboot封裝好了的,我們直接使用即可,普通的配置我...