spring boot 全域性異常統一攔截處理

2021-10-23 20:52:34 字數 2142 閱讀 9235

經常開發介面的同學肯定知道,介面返回的資料格式必須有固定的格式,方便呼叫者

對於不同的異常我們在實際開發中最好也有統一的處理

在spring boot中與預設的異常頁面,如果我們要開發rest風格的api,返回的json資料

那麼異常提示也要是json格式的,返回乙個頁面的錯誤異常就不友好了

接下來我看怎麼統一處理這些異常資訊以及自己定義一些常用的異常

先定義乙個全域性的異常類,繼承exception ,裡面有code屬性,表示請求的響應狀態碼

public class globalexception extends exception 

public int getcode()

public globalexception(string message)

public globalexception(string message, int code)

}

定義乙個響應碼的列舉類,400引數錯誤,500伺服器內部錯誤,可以根據自己的需求新增自定義的響應碼

public enum responsecode 

public int getcode()

private responsecode(int code)

}

然後建立剛剛異常碼對應的異常類

//伺服器異常類

public class serverexception extends globalexception

}

//引數異常類

public class paramexception extends globalexception

}

接著我們定義乙個統一的介面返回格式類

裡面有狀態,響應碼,訊息,返回的資料等屬性

public class responsedata 

public responsedata(object data)

public responsedata()

public boolean getstatus()

public void setstatus(boolean status)

public int getcode()

public void setcode(int code)

public string getmessage()

public void setmessage(string message)

public object getdata()

public void setdata(object data)

}

在這邊攔截異常,然後封裝統一的返回格式

@controlleradvice

public class globalexceptionhandler

}

或 

@restcontrolleradvice

public class globalexceptionhandler

}

使用的地方我們使用responsedata返回統一的資料格式

object querystudents() throws globalexception

訪問介面可以看到返回的資料格式如下:

,

]}

下面的列子模擬的怎麼使用自定義的異常

object querystudentbyname(@pathvariable string name) throws exception

if(name.equals("2"))

return responsedata.ok(studentrepository.findbyname(name));}

我們假設引數等於1的時候,是引數錯誤,然後跑出引數錯誤異常,那麼客戶端收到的返回結果如下:

status為false,code為400,還有錯誤說明message

假設引數為2的時候,是內部錯誤,返回的結果如下:

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

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

springboot全域性異常捕獲

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

SpringBoot全域性異常處理

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