一、springboot預設的錯誤處理機制
預設效果:
1、瀏覽器,返回乙個預設的錯誤頁面。
2、如果是其他客戶端,預設響應乙個json資料。
3、原理:可以參照errormvcautoconfiguration;錯誤處理的自動配置。給容器中新增了以下元件:
(1)、defaulterrorattributes:
//幫我們在頁面共享資訊
@override
public mapgeterrorattributes(requestattributes requestattributes,
boolean includestacktrace)
(2)、basicerrorcontroller:處理預設/error
請求。
@controller
public class basicerrorcontroller extends abstracterrorcontroller
@responsebody //產生json資料,其他客戶端來到這個方法處理;
private string path = "/error"; //系統出現錯誤以後來到error請求進行處理;(web.xml註冊的錯誤頁面規則)
//模板引擎不可用,就在靜態資源資料夾下找errorviewname對應的頁面 error/404.html
return resolveresource(errorviewname, model);
}
4、步驟:
一但系統出現4xx或者5xx之類的錯誤;errorpagecustomizer 就會生效(定製錯誤的響應規則);就會來到/error
請求;就會被 basicerrorcontroller 處理。
(1)、響應頁面;去哪個頁面是由 defaulterrorviewresolver 解析得到的。
}二、定製錯誤響應
1、定製錯誤的頁面
(1)、有模板引擎的情況下;error/
狀態碼;【將錯誤頁面命名為錯誤狀態碼.html
放在模板引擎資料夾裡面的 error資料夾下】,發生此狀態碼的錯誤就會來到對應的頁面。我們可以使用4xx和5xx作為錯誤頁面的檔名來匹配這種型別的所有錯誤,精確優先(優先尋找精確的狀態碼.html)。
頁面能獲取的資訊:timestamp:時間戳;status:狀態碼;error:錯誤提示;exception:異常物件;message:異常訊息;errors:jsr303資料校驗的錯誤都在這裡。
(2)、沒有模板引擎,即模板引擎找不到這個錯誤頁面,就在靜態資源資料夾下找;
(3)、以上都沒有錯誤頁面,就是預設來到springboot預設的錯誤提示頁面;
2、定製錯誤的json資料
(1)、自定義異常處理並返回定製json資料。
public class usernotexistexception extends runtimeexception
}
@controlleradvice
public class myexceptionhandler
}
(3)、**到/error
進行自適應響應效果處理。
3、將定製的資料攜帶出去
出現錯誤以後,會來到/error
請求,會被 basicerrorcontroller 處理,響應出去可以獲取的資料是由geterrorattributes 得到的(是abstracterrorcontroller(errorcontroller)規定的方法);
(1)、完全來編寫乙個errorcontroller的實現類【或者是編寫abstracterrorcontroller的子類】,放在容器中;(2)、頁面上能用的資料,或者是json返回能用的資料都是通過 errorattributes.geterrorattributes 得到;容器中defaulterrorattributes.geterrorattributes();預設進行資料處理的;自定義 errorattributes :
//給容器中加入我們自己定義的errorattributes
@component
public class myerrorattributes extends defaulterrorattributes
}
最終的效果:響應是自適應的,可以通過定製 errorattributes 改變需要返回的內容:
三十三 Springboot整合 Actuator
一 actuator簡介 參見spring boot 2.0 中使用 actuator 對actuator endpoints簡單進行歸納分類 監控類 端點資訊 應用資訊 外部化配置資訊 指標資訊 健康檢查 bean管理 web url 對映管理 web url 跟蹤 管理類 外部化配置 日誌配置 ...
SpringBoot 十三 CORS方式實現跨域
什麼是跨域?瀏覽器從乙個網域名稱的網頁去請求另乙個網域名稱的資源時,網域名稱 埠 協議任一不同,都是跨域 跨域資源訪問是經常會遇到的場景,當乙個資源從與該資源本身所在的伺服器不同的域或埠請求乙個資源時,資源便會發起乙個跨域 http 請求。出於安全考慮,瀏覽器會限制從指令碼內發起的跨域http請求。...
Spring Boot 系列教程
spring boot 系列教程 spring boot 快速入門教程 spring boot 整合swagger文件 spring boot 整合mybatis框架 spring boot 實現mybatis分頁 spring boot 整合druid資料來源 spring boot 實現myba...