簡單認識springboot的錯誤處理機制

2022-09-09 00:06:27 字數 3153 閱讀 4458

預設的處理效果:

瀏覽器返回乙個錯誤頁面404

如果是其他客戶端,預設響應乙個json資料

原理:errormvcautoconfiguration錯誤處理的自動配置

給容器新增了一下元件:

//errorattributes,容器中沒有這個元件則自動配置乙個defaulterrorattributes,即我們看見的錯誤處理

@bean

@conditionalo****singbean(

value = ,

search = searchstrategy.current

)public defaulterrorattributes errorattributes()

//errorcontroller

@bean

@conditionalo****singbean(

value = ,

search = searchstrategy.current

)public basicerrorcontroller basicerrorcontroller(errorattributes errorattributes, objectprovidererrorviewresolvers)

//errorpagecustomizer

@bean

public errormvcautoconfiguration.errorpagecustomizer errorpagecustomizer(dispatcherservletpath dispatcherservletpath)

//defaulterrorviewresolver

@bean

@conditionalonbean()

@conditionalo****singbean()

defaulterrorviewresolver conventionerrorviewresolver()

步驟:

​ 一旦系統出現4xx或者5xx之類的錯誤,errorpagecustomizer就會生效(定製錯誤的響應規則),就會被basicerrorcontroller處理

​ 響應頁面:去哪個頁面是由defaulterrorviewresolver解析得到的;通過defaulterrorattributes獲得錯誤頁面可共享的資訊:

​ status:狀態碼

​ exception:異常物件

​ message:異常訊息

​ error :錯誤提示

​ timestamp:時間戳

​ errors:jsr303校驗的錯誤

原始碼如下:

defaulterrorattributes

//幫我們在頁面共享資訊

public mapgeterrorattributes(webrequest webrequest, errorattributeoptions options) );

}if (!options.isincluded(include.exception))

if (!options.isincluded(include.stack_trace))

if (!options.isincluded(include.message) && errorattributes.get("message") != null)

if (!options.isincluded(include.binding_errors))

return errorattributes;

}public mapgeterrorattributes(webrequest webrequest, boolean includestacktrace)

basicerrorcontroller

@controller

public class basicerrorcontroller extends abstracterrorcontroller }如果有配置檔案中配置路徑,也能獲取

//瀏覽器傳送的請求請求頭帶有text/html,會來到這個方法處理

produces = //返回html格式

//其他的裝置請求頭不會有text/html,就來到這個方法

系統出現錯誤以後,來到error請求進行處理;

//呼叫errorviewresolver獲取所有錯誤頁面,取到對應的就返回

this簡單認識

this 在函式中簡單的說,this的指向存在於函式呼叫的時候決定的,誰呼叫了這函式 函式中的this就指向誰 例如 1 普通的呼叫函式的時候 fn window2 物件呼叫 var obj obj.f fn obj.f this obj3 定時器呼叫 因為fn不是我們自己手寫 呼叫的 底層是win...

NSRunloop的簡單認識

最早接觸runloop的概念,是第一次用nstimer的時候。乙個最簡單的例子 void viewdidload 如果我們同時在介面上滾動乙個scrollview,那麼我們會發現在滾動停止之前,控制台是不會有輸出的,就好像scrollview在滾動的時候將timer暫停了一樣。通過了解後發現,其實是...

Socket的簡單認識

socket又稱 套接字 網路上的兩個程式通過乙個 雙向的通訊連線實現資料的交換 這個連線的一端稱為乙個 socket。應用程式通常通過 套接字 向網路發出請求或者應答網路請求 網路通訊的要素 網路上的請求就是通過 socket 來建立連線然後互相通訊 ip位址 網路上主機裝置的 唯一標識 埠號 定...