SpringBoot默認的錯誤處理機制

錯誤處理機制:

訪問一個不存在的頁面時,或者程序拋出異常時

默認效果

  • 瀏覽器返回一個錯誤的頁面,注意查看瀏覽器發送請求的請求頭

  • 可以使用專業的軟件比如postman分析返回的json數據

springboot錯誤處理的自動配置信息

主要給日容器中注冊了以下組件:

  • ErrorPageCustomizer 系統出現錯誤以后來到error請求進行處理;相當于(web.xml注冊的錯誤頁面規則)
  • BasicErrorController 處理/error請求
  • DefaultErrorViewResolver 默認的錯誤視圖解析器
  • DefaultErrorAttributes 錯誤信息
  • defaultErrorView 默認錯誤視圖

@getErrorAttributes()返回的參數

  • timestamp:時間戳
  • status:狀態碼
  • error:錯誤提示
  • exception:異常對象
  • message:異常消息
  • errors:JSR303數據校驗的錯誤都在這里

2.0以后默認是不顯示exception的,需要在配置文件中開啟

server.error.include-exception=true

如何定制JSON數據

springboot做了自適應效果,瀏覽器訪問響應錯誤頁面。客戶端訪問響應錯誤信息的json數據

  1. 第一種方法,定義全局異常處理器類注入到容器中,捕獲到異常返回json格式的數據

    @ControllerAdvice
    public class MyExceptionHandler {@ResponseBody@ExceptionHandler(Exception.class)public Map<String, Object> handleException(Exception e) {Map<String, Object> map = new HashMap(2);map.put("code", "100011");map.put("msg", e.getMessage());return map;}
    }
  2. 由上面我們已經知道數據的來源是調用DefaultErrorAttributes的getErrorAttributes方法得到的,而這個DefaultErrorAttributes是在ErrorMvcAutoConfiguration配置類中注冊的,并且注冊之前會檢查容器中是否已經擁有
        @Bean@ConditionalOnMissingBean(value = {ErrorAttributes.class},search = SearchStrategy.CURRENT)public DefaultErrorAttributes errorAttributes() {return new DefaultErrorAttributes(this.serverProperties.getError().isIncludeException());}

所以我們可以只要實現ErrorAttributes接口或者繼承DefaultErrorAttrites類,然后注冊到容器中就行了

@ControllerAdvice
public class MyExceptionHandler {@ExceptionHandler(Exception.class)public String handleException(Exception e, HttpServletRequest request) {Map<String, Object> map = new HashMap(2);map.put("name", "hello");map.put("password", "123456");//設置狀態碼request.setAttribute("javax.servlet.error.status_code", 500);//把數據放到request域中request.setAttribute("ext", map);return "forward:/error";}
}
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {@Beanpublic DefaultErrorAttributes errorAttributes() {return new MyErrorAttributes();}class MyErrorAttributes extends DefaultErrorAttributes {@Overridepublic Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {//調用父類的方法獲取默認的數據Map<String, Object> map = new HashMap<>(super.getErrorAttributes(webRequest, includeStackTrace));//從request域從獲取到自定義數據Map<String, Object> ext = (Map<String, Object>) webRequest.getAttribute("ext", RequestAttributes.SCOPE_REQUEST);map.putAll(ext);return map;}}......

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447358.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447358.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447358.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GitHub政府用戶破萬:開源成重塑政府新手段

據GitHub官方博客介紹&#xff0c;目前GitHub上的各地政府用戶數量已經達到1萬個&#xff01; 2009年&#xff0c;紐約參議院正式入駐GitHub公開部分技術資料與文檔&#xff0c;成為GitHub上的第一個政府組織。隨后&#xff0c;美國華盛頓特區、邁阿密、芝加哥、紐約&#xff…

配置嵌入式Servlet容器

如何定制和修改Servlet容器的相關配置 修改定制和修改Servlet容器的相關配置 server.port8081 server.context-path/crudserver.tomcat.uri-encodingUTF-8//通用的Servlet容器設置 server.xxx //Tomcat的設置 server.tomcat.xxx 編寫一個EmbeddedServletContainerCustomizer&…

云OS:Linux在桌面打翻身仗的機會?

不可否認&#xff0c;Chrome OS取得了驚人的增長。Chromebook自發行以來&#xff0c;迅速席卷全球&#xff0c;常年位居最暢銷筆記本榜首。這款基于Linux的筆記本在合適時間提供了合適的解決方案。很多情況下&#xff0c;云不僅僅是一個可選項&#xff0c;而是一個最優選項。Li…

Docker容器基本使用

Dcoker Docker是一個開源的應用容器引擎&#xff0c;是一個輕量級別的容器技術Dcoker支持將軟件編譯成一個鏡像&#xff1b;然后在鏡像中對各種軟件做好配置&#xff0c;再將鏡像發布出去&#xff0c;供別人使用運行中的鏡像稱為容器&#xff0c;容器的啟動是非常快速的核心概…

為什么35歲的C++依然能主導編程世界

早在1979年&#xff0c;Bjarne Stroustrup設計了C編程語言&#xff0c;并且C很快成為了無處不在的通用系統編程語言。現在盡管有Java、Javascript、Python、Go&#xff0c;甚至是蘋果的Swift和它競爭&#xff0c;但C依然處于主導編程世界的地位。 今天在Morgan Stanley的科技訪…

SpringBoot整合JPA

添加依賴 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId&…

為什么說選擇正確的編程語言很重要,以及如何正確的選擇

幾個月前&#xff0c;一個同事問我&#xff0c;應該如何選擇編程語言&#xff0c;或者有沒有什么固定的選擇模式&#xff0c;當時我便打算寫點什么。上周在硅谷開會&#xff0c;這我是第一次跟“hack3rs”的創業狂以及技術狂們打交道。我學會了很多前所未聞的臟話&#xff0c;也…

細數開源歷史上的十個重大事件

開放源碼&#xff08;開源&#xff09;的精神在于使用者可以使用、復制、散布、研究和改進軟件。這可以追溯到20世紀60年代&#xff0c;至今已有半個世紀了。雖然下面所列舉的不都是專門的開源產品&#xff0c;但還是在開源發展的進程中有著巨大的影響。開放源碼&#xff08;開…

科研必備學士搜索引擎推薦

綜合性學術搜索引擎 中國知網萬方數據百度學術谷歌學術谷歌學術鏡像Web of ScienceEiVillage2EIsevier電子期刊SpringerSemanticScholar 圖片文獻檢索方法 CNKI 期刊查詢 DOAJSocolarOpenDOAROALIB開放存取圖書館 碩博論文搜索下載 上海交大鏡像網站歐洲學位論文庫 國外電子…

如何寫一篇論文

文獻綜述的地位 體現了學術研究的繼承性 文獻綜述的寫作是由學術研究的繼承性決定的&#xff0c;因為繼承是創新的基礎和前提。文獻綜述部分要澄清所研究問題“從哪里來&#xff0c;到哪里去” 。這部分主要是繼承&#xff0c;是梳理前人的成果并找出其內在的邏輯關系和演進的規…

深度卷積神經網絡CNNs的多GPU并行框架及其應用

摘要&#xff1a;本文是騰訊深度學習系列文章之一&#xff0c;主要聚焦于騰訊深度學習平臺&#xff08;Tencent Deep Learning Platform&#xff09;中深度卷積神經網絡Deep CNNs的多GPU模型并行和數據并行框架。 【編者按】深度卷積神經網絡有著廣泛的應用場景&#xff0c;本…

如果誤刪谷歌瀏覽器的書簽,怎么恢復

如果是Mac用戶&#xff0c;command和z一直恢復就可以 同理&#xff0c;windows用戶&#xff0c;也可以使用撤銷鍵&#xff0c;ctrlz即可

55分鐘學會正則表達式

正則表達式是一種查找以及字符串替換操作。正則表達式在文本編輯器中廣泛使用&#xff0c;比如正則表達式被用于&#xff1a; 檢查文本中是否含有指定的特征詞找出文中匹配特征詞的位置從文本中提取信息&#xff0c;比如&#xff1a;字符串的子串修改文本 與文本編輯器相似&a…

線程安全和對應的核心概念

線程安全 線程安全的概念&#xff1a;當多個線程訪問某一個類&#xff08;對象和方法&#xff09;時&#xff0c;這個類始終都能表現出正確的行為&#xff0c;那么這個類&#xff08;對象或者方法&#xff09;就是線程安全的synchronized&#xff1a;可以在任意對象及方法上加…

JDK Unsafe類的使用與CAS原子特性

JDK Unsafe類的使用與CAS原子特性 Java.util.concurrent.atomic包&#xff0c;其中包含了大量使用到Unsafe這個類Java不能直接訪問操作系統的底層&#xff0c;而是通過本地方法來訪問。 Unsafe類提供了硬件級別的原子操作&#xff0c;主要提供了以下功能 內存操作字段的定位和…

寫軟件不是造汽車

寫軟件和做其他事情是不一樣的。當我們制造別的東西的時候——像汽車、玩具、椅子、畫作、甚至包括數字產品如平面圖片和3D模型——我們做出來的成品就是最終的結果。而開發軟件則不是&#xff0c;我們做出來的產品永遠不可能有最終的結果——我們需要向計算機解釋如何根據任意…

線程池核心概述

線程池核心概述 Executors工廠類使用 Executors工廠類底層源碼分析詳解 ThreadPoolExecutor自定義線程池 ThreadPoolExecutor拒絕策略詳解 計算機密集型與IO密集型詳解 如何正確的使用線程池…

網站盈利的10種方式

如果你有自己的網站&#xff0c;而且已經有了不少的流量&#xff0c;你肯定會開始考慮如何通過這個網站來掙一些錢。 在這篇文章中&#xff0c;我會向大家介紹網站最常見的10種盈利方式。 1.按點擊付費廣告 在網站上展示一個按點擊付費的廣告橫幅是最簡單的盈利方式&#xff…

程序員如何創業?

摘要&#xff1a;工作機會減少&#xff0c;讀大學也不是保障。大公司亦不再是構筑職業生涯的安全港灣。透過媒體的鏡頭&#xff0c;創業似乎成了沙漠中唯一的綠洲。然而關于創業&#xff0c;或許少有人給你建議&#xff0c;這里所列出的一些因素都是你可以考慮的。 如果你的年…

Redis數據的類型

Redis一共分為五種基本數據類型&#xff1a;String、Hash、List、Set、Zset. string 內部編碼有三種&#xff0c;raw&#xff0c;embstr&#xff0c;int String 是二進制的。可以存儲序列化對象&#xff0c;圖片&#xff0c;字符串&#xff0c;數值等 set和get方法 &#x…