亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

SpringBoot 工程中的異常處理方式

瀏覽:14日期:2023-03-25 09:18:08
背景分析

在項(xiàng)目的開(kāi)發(fā)中,不管是對(duì)底層的數(shù)據(jù)邏輯操作過(guò)程,還是業(yè)務(wù)邏輯的處理過(guò)程,還是控制邏輯的處理過(guò)程,都不可避免會(huì)遇到各種可預(yù)知的、不可預(yù)知的異常。處理好異常對(duì)系統(tǒng)有很好的保護(hù)作用,同時(shí)會(huì)大大提高用戶的體驗(yàn)。

異常處理分析概述

Java項(xiàng)目中處理異常方式無(wú)非兩種,要么執(zhí)行trycatch操作,要么執(zhí)行throw操作(拋給其它對(duì)象處理),無(wú)論采用哪種方式,其目的是讓我們的系統(tǒng)對(duì)異常要有反饋。但現(xiàn)在的問(wèn)題是我們?nèi)绾巫屵@種反饋代碼的編寫即簡(jiǎn)單又直觀、友好。

處理規(guī)范

我們?cè)谔幚懋惓5倪^(guò)程中通常要遵循一定的設(shè)計(jì)規(guī)范,例如:

捕獲異常時(shí)與拋出的異常必須完全匹配,或者捕獲異常是拋出異常的父類類型。 避免直接拋出RuntimeException,更不允許拋出Exception或者Throwable,應(yīng)使用有業(yè)務(wù)含義的自定義異常(例如ServiceException)。 捕獲異常后必須進(jìn)行處理(例如記錄日志)。如果不想處理它,需要將異常拋給它的調(diào)用者。 最外層的邏輯必須處理異常,將其轉(zhuǎn)化成用戶可以理解的內(nèi)容。 避免出現(xiàn)重復(fù)的代碼(Don’t Repeat Yourself),即DAY原則。 SpringBoot 工程下的異常處理

準(zhǔn)備工作

第一步:創(chuàng)建項(xiàng)目或module,并添加web依賴,代碼如下:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>

第二步:修改項(xiàng)目訪問(wèn)端口為80,例如

server.port=80

第三步:定義Controller類,代碼如下:

package com.cy.pj.arithmetic.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;@Controllerpublic class ArithmeticController { @RequestMapping('doCompute/{n1}/{n2}') @ResponseBody public String doCompute(@PathVariable Integer n1, @PathVariable Integer n2){ Integer result=n1/n2; return 'Result is '+result; }}

第四步啟動(dòng)項(xiàng)目進(jìn)行訪問(wèn)測(cè)試

在瀏覽器地址欄輸入http://localhost/doCompute/10/2,檢測(cè)輸出結(jié)果。

Result is 5默認(rèn)異常處理

在瀏覽器地址欄輸入http://localhost/doCompute/10/0,檢測(cè)輸出結(jié)果。

SpringBoot 工程中的異常處理方式

對(duì)于這樣的默認(rèn)異常處理(spring boot提供),用戶體驗(yàn)不太友好,為了呈現(xiàn)更加友好的異常信息,我們通常要對(duì)異常進(jìn)行自定義處理。

自己try異常處理

在控制層方法中,我們可以進(jìn)行try catch處理,例如:

@RequestMapping('doCompute/{n1}/{n2}') @ResponseBody public String doCompute(@PathVariable Integer n1, @PathVariable Integer n2){ try{ Integer result=n1/n2; return 'Result is '+result; }catch(ArithmeticException e){ return 'exception is '+e.getMessage(); } }

一個(gè)Controller類中通常會(huì)有多個(gè)方法,這樣多個(gè)方法中都寫try語(yǔ)句進(jìn)行異常處理會(huì)帶來(lái)大量重復(fù)代碼的編寫,不易維護(hù)。

Controller內(nèi)部定義異常處理方法

在Controller類中添加異常處理方法,代碼如下:

@ExceptionHandler(ArithmeticException.class)@ResponseBodypublic String doHandleArithmeticException(ArithmeticException e){ e.printStackTrace(); return '計(jì)算過(guò)程中出現(xiàn)了異常,異常信息為'+e.getMessage();}

@ExceptionHandler注解描述的方法為異常處理方法(注解中的異常類型為可處理的異常類型),假如Controller類中的邏輯方法中出現(xiàn)異常后沒(méi)有處理異常,則會(huì)查找Controller類中有沒(méi)有定義異常處理方法,假如定義了,且可以處理拋出的異常類型,則由異常處理方法處理異常。

控制層中的全局異常處理類及方法定義

當(dāng)項(xiàng)目由多個(gè)控制層類中有多個(gè)共性異常的處理方法定義時(shí),我們可以將這些方法提取到公共的父類對(duì)象中,但是這種方式是一種強(qiáng)耦合的實(shí)現(xiàn),不利于代碼的維護(hù)。我們還可以借助spring框架中web模塊定義的全局異常處理規(guī)范進(jìn)行實(shí)現(xiàn),例如定義全局異常處理類,代碼如下:

package com.cy.pj.common.web;@RestControllerAdvicepublic class GlobalExceptionHandler { @ExceptionHandler(ArithmeticException.class) public String doHandleArithmeticException(ArithmeticException e){ e.printStackTrace(); return '計(jì)算過(guò)程中出現(xiàn)了異常,異常信息為'+e.getMessage(); }}

其中,@RestControllerAdvice 注解描述的類為全局異常處理類,當(dāng)控制層方法中的異常沒(méi)有自己捕獲,也沒(méi)有定義其內(nèi)部的異常處理方法,底層默認(rèn)會(huì)查找全局異常處理類,調(diào)用對(duì)應(yīng)的異常處理方法進(jìn)行異常處理。如圖所示:

SpringBoot 工程中的異常處理方式

總結(jié)(Summary)

本小節(jié)主要是對(duì)springboot中的異常處理機(jī)制進(jìn)行了簡(jiǎn)單分析和講解。目的是掌握springboot工程下的異常處理方式,并基于業(yè)務(wù)的不同進(jìn)行響應(yīng)的異常處理。從而有效提高其用戶體驗(yàn),加強(qiáng)系統(tǒng)的容錯(cuò)能力。

以上就是SpringBoot 工程中的異常處理方式的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot 異常處理的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 99热国产这里只有精品9九 | 亚洲欧美在线精品 | 青青伊人网 | 日韩美女视频一区 | 91精品日本久久久久久牛牛 | 激情婷婷在线 | 日韩精品视频网 | 日本一区二区在线不卡 | 国产免费福利体检区久久 | 亚洲成人免费视频 | 奇米中文字幕 | 国产精品白嫩在线观看 | 午夜亚洲视频 | 美女污污视频在线观看 | 国产一区二区网站 | 久久精品国产只有精品2020 | 国产在线观看精品香蕉v区 国产在线每日更新 | 激情在线免费视频 | 国产大片免费观看网站 | 亚洲欧洲国产综合 | 日批国产 | 久草视频在线免费看 | 久久在线免费观看 | www.黄色网.com | 亚洲欧美日本欧美在线播放污 | 91小视频版在线观看www | 日本一本高清视频 | 国产精品爱久久久 | 中文字幕最新中文字幕中文字幕 | 免费黄色在线观看视频 | 人成免费网站 | 黄色片网站免费观看 | 国产成人精品日本亚洲11 | 中日韩美中文字幕 | 手机免费看黄在线高清视频 | 国产成人亚洲综合网站不卡 | 久久久全国免费视频 | 亚洲国产一区二区三区四区五区 | aaaaaa级特色特黄的毛片 | 欧美亚洲人成网站在线观看刚交 | 91天堂亚洲精品一区 |