电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Springboot異常錯誤處理解決方案詳解

瀏覽:57日期:2023-04-29 10:12:20

1.在有模板引擎的情況下:

springboot會默認找 templates/error/錯誤狀態碼.html,所以我們要定制化錯誤頁面就可以到templates/error下創建一個【對應錯誤狀態碼.html】html文件,當發生此狀態碼的錯誤springboot就會來到對應的頁面。

同時如果我們想讓400-499之間的錯誤都去同一個錯誤頁面,那我們可以在templates/error下創建一個4xx.html。同理500-599的錯誤可以用5xx.html。

Springboot異常錯誤處理解決方案詳解

注意:springboot會優先匹配具體的【錯誤狀態碼.html】,然后再匹配4xx,5xx的。例如:發生了404錯誤,springboot優先到templates/error下找404.html,如果沒有404.html,再找有沒有4xx.html,有的話就會使用4xx.html。

在錯誤頁面我們能夠獲取到的信息:

timestamp:時間戳 status:狀態碼 error:錯誤提示 exception:異常對象 springboot2.1.6在頁面獲取異常對象要現在全局配置文件中加入:server.error.include-exception=true message:異常消息 errors:JSR數據校驗的錯誤

2.在沒有模板引擎(模板引擎找不到這個錯誤頁面)的情況下,springboot會到靜態資源文件夾下的error包下找。

3.以上都沒有找到錯誤頁面,就默認用springboot默認的錯誤提示頁面

錯誤異常處理——自定義響應json數據

上邊的錯誤處理中,如果是瀏覽器訪問可以響應我們自己定制的錯誤頁面,但是如果是其他客戶端訪問,則只會響應固定的json數據,如下圖所示:

Springboot異常錯誤處理解決方案詳解

下邊講解三個異常處理返回自定義json數據的方式

首先編寫一個自定義異常類

public class UserNotExitException extends RuntimeException { public UserNotExitException() { super('用戶不存在'); }}

方式一:

在異常處理器類中,通過map封裝我們自己的json數據,然后將map返回。

@ControllerAdvicepublic class MyExceptionHandler { @ResponseBody @ExceptionHandler(UserNotExitException.class) public Map<String,Object> userNotExitExceptionHandler(Exception e){ Map<String,Object> map = new HashMap<>(); map.put('code','user.notexit'); map.put('message',e.getMessage()); return map; }}

@ControllerAdvice:表明這是一個全局異常處理類

@ExceptionHandler(UserNotExitException.class):表明標注的此方法用于處理UserNotExitException異常。

@ResponseBody:將返回結果封裝為json

3.結果

不管瀏覽器還是其他客戶端發生該異常都統一得到下圖的響應

Springboot異常錯誤處理解決方案詳解

方式二:轉發到/error,進行自適應響應效果處理

@ControllerAdvicepublic class MyExceptionHandler { @ExceptionHandler(UserNotExitException.class) public String userNotExitExceptionHandler(Exception e, HttpServletRequest request){ Map<String,Object> map = new HashMap<>(); request.setAttribute('javax.servlet.error.status_code',500); map.put('code','user.notexit'); map.put('message','用戶出錯了'); return 'forward:/error'; }}

將響應轉發到 /error,讓springboot幫我們生成自適應效果。但是必須注意,一定要設置錯誤狀態碼(如代碼中標黃色的那一句代碼)。不設置的話springboot就不會進入定制錯誤頁面的解析流程。設置了之后springboot就會到templates/error/錯誤狀態碼.html頁面處理。

注意:此方式瀏覽器訪問發生錯誤不再響應的是json數據了,而是對于的錯誤響應網頁。

Springboot異常錯誤處理解決方案詳解

其他客戶端訪問響應的是json數據,但是響應的json數據中沒有我們map中put的數據。

Springboot異常錯誤處理解決方案詳解

方式三:通過DefaultErrorAttribute

1.在異常處理器類中將響應的json數據封裝到map中,然后再將map放到請求域中

@ControllerAdvicepublic class MyExceptionHandler { @ExceptionHandler(UserNotExitException.class) public String userNotExitExceptionHandler(Exception e, HttpServletRequest request){ Map<String,Object> map = new HashMap<>(); request.setAttribute('javax.servlet.error.status_code',500); map.put('code','user.notexit'); map.put('message','用戶出錯了'); request.setAttribute('ext',map); return 'forward:/error'; }}

2.編寫錯誤屬性類:新建一個類繼承DefaultErrorAttribute類,并重寫其中的getErrorAttributes方法

@Componentpublic class MyErrorAttributes extends DefaultErrorAttributes { @Override public Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) { Map<String, Object> map = super.getErrorAttributes(webRequest, includeStackTrace); map.put('company','atguigu'); Map<String, Object> ext = (Map<String, Object>) webRequest.getAttribute('ext', 0); map.put('ext',ext); return map; }}

注意:

(1).必須將錯誤屬性類添加到spring容器中。

(2).第7行標黃那段代碼的作用是獲取異常處理類中的map。其中最后的參數0,是從request域中取出數據“ext”。若要從session域中取數據,則將該參數設置為1.(0是從request域獲取數據,1是從session域中獲取數據)

(3).錯誤屬性類中返回的map中的所有內容,頁面都可以獲取到。

總結:

此方式最好,當瀏覽器訪問發生錯誤時,會響應對應的錯誤響應頁面,當其他客戶端訪問發生錯誤時也會響應我們定制的json數據。

瀏覽器響應:

Springboot異常錯誤處理解決方案詳解

其他客戶端響應:

Springboot異常錯誤處理解決方案詳解

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
主站蜘蛛池模板: 不锈钢闸阀_球阀_蝶阀_止回阀_调节阀_截止阀-可拉伐阀门(上海)有限公司 | 北京公司注册_代理记账_代办商标注册工商执照-企力宝 | 达利园物流科技集团- | 废气处理设备-工业除尘器-RTO-RCO-蓄热式焚烧炉厂家-江苏天达环保设备有限公司 | 汝成内控-行政事业单位内部控制管理服务商| 色谱柱-淋洗液罐-巴罗克试剂槽-巴氏吸管-5ml样品瓶-SBS液氮冻存管-上海希言科学仪器有限公司 | 济宁工业提升门|济宁电动防火门|济宁快速堆积门-济宁市统一电动门有限公司 | TPE_TPE热塑性弹性体_TPE原料价格_TPE材料厂家-惠州市中塑王塑胶制品公司- 中塑王塑胶制品有限公司 | 数显恒温油浴-电砂浴-高温油浴振荡器-常州迈科诺仪器有限公司 | 香港新时代国际美容美发化妆美甲培训学校-26年培训经验,值得信赖! | 安徽控制器-合肥船用空调控制器-合肥家电控制器-合肥迅驰电子厂 安徽净化板_合肥岩棉板厂家_玻镁板厂家_安徽科艺美洁净科技有限公司 | 股票入门基础知识_股票知识_股票投资大师_格雷厄姆网 | 深圳天际源广告-形象堆头,企业文化墙,喷绘,门头招牌设计制作专家 | 电动高压冲洗车_价格-江苏速利达机车有限公司 | 油液红外光谱仪-油液监测系统-燃油嗅探仪-上海冉超光电科技有限公司 | 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 变色龙云 - 打包app_原生app_在线制作平台_短链接_ip查询 | 贵州成人高考网_贵州成考网 | 钛合金标准件-钛合金螺丝-钛管件-钛合金棒-钛合金板-钛合金锻件-宝鸡远航钛业有限公司 | nalgene洗瓶,nalgene量筒,nalgene窄口瓶,nalgene放水口大瓶,浙江省nalgene代理-杭州雷琪实验器材有限公司 | 罗茨真空机组,立式无油往复真空泵,2BV水环真空泵-力侨真空科技 | 盘式曝气器-微孔曝气器-管式曝气器-曝气盘-斜管填料 | 郑州市前程水处理有限公司 | 企业管理培训,企业培训公开课,企业内训课程,企业培训师 - 名课堂企业管理培训网 | 布袋式除尘器|木工除尘器|螺旋输送机|斗式提升机|刮板输送机|除尘器配件-泊头市德佳环保设备 | 细石混凝土泵_厂家_价格-烟台九达机械有限公司 | 电液推杆生产厂家|电动推杆|液压推杆-扬州唯升机械有限公司 | 高压互感器,电流互感器,电压互感器-上海鄂互电气科技有限公司 | 工业铝型材生产厂家_铝合金型材配件批发精加工定制厂商 - 上海岐易铝业 | 硅PU球场、篮球场地面施工「水性、环保、弹性」硅PU材料生产厂家-广东中星体育公司 | 济南品牌包装设计公司_济南VI标志设计公司_山东锐尚文化传播 | 鼓风干燥箱_真空烘箱_高温干燥箱_恒温培养箱-上海笃特科学仪器 | 广州番禺搬家公司_天河黄埔搬家公司_企业工厂搬迁_日式搬家_广州搬家公司_厚道搬迁搬家公司 | 电动百叶窗,开窗器,电动遮阳百叶,电动开窗机生产厂家-徐州鑫友工控科技发展有限公司 | 天津云仓-天津仓储物流-天津云仓一件代发-顺东云仓 | 软文发布-新闻发布推广平台-代写文章-网络广告营销-自助发稿公司媒介星 | 净气型药品柜-试剂柜-无管道净气型通风柜-苏州毕恩思 | 污泥烘干机-低温干化机-工业污泥烘干设备厂家-焦作市真节能环保设备科技有限公司 | 大_小鼠elisa试剂盒-植物_人Elisa试剂盒-PCR荧光定量试剂盒-上海一研生物科技有限公司 | 北京模型公司-军事模型-工业模型制作-北京百艺模型沙盘公司 | 密集柜_档案密集柜_智能密集架_密集柜厂家_密集架价格-智英伟业 密集架-密集柜厂家-智能档案密集架-自动选层柜订做-河北风顺金属制品有限公司 | 房屋质量检测-厂房抗震鉴定-玻璃幕墙检测-房屋安全鉴定机构 |