最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot異常處理的基本規(guī)范

 更新時間:2020年11月10日 10:25:27   作者:Jame  
這篇文章主要給大家介紹了關(guān)于springboot異常處理的基本規(guī)范,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

背景分析

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

異常處理分析

概述

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

處理規(guī)范

我們在處理異常的過程中通常要遵循一定的設(shè)計規(guī)范,例如:

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

SpringBoot 工程下的異常處理

準(zhǔn)備工作

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

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

第二步:修改項目訪問端口為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;

@Controller
public class ArithmeticController {

 @RequestMapping("doCompute/{n1}/{n2}")
 @ResponseBody
 public String doCompute(@PathVariable Integer n1, 
 @PathVariable Integer n2){
  Integer result=n1/n2;
  return "Result is "+result;
 }
}

第四步啟動項目進行訪問測試

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

Result is 5

默認(rèn)異常處理

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

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

自己try異常處理

在控制層方法中,我們可以進行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();
   }
 } 

一個Controller類中通常會有多個方法,這樣多個方法中都寫try語句進行異常處理會帶來大量重復(fù)代碼的編寫,不易維護。

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

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

@ExceptionHandler(ArithmeticException.class)
@ResponseBody
public String doHandleArithmeticException(ArithmeticException e){
 e.printStackTrace();
 return "計算過程中出現(xiàn)了異常,異常信息為"+e.getMessage();
}

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

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

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

package com.cy.pj.common.web;

@RestControllerAdvice
public class GlobalExceptionHandler {

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

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

總結(jié)

到此這篇關(guān)于springboot異常處理基本規(guī)范的文章就介紹到這了,更多相關(guān)springboot異常處理規(guī)范內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Day14基礎(chǔ)不牢地動山搖-Java基礎(chǔ)

    Day14基礎(chǔ)不牢地動山搖-Java基礎(chǔ)

    這篇文章主要給大家介紹了關(guān)于Java中方法使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • java socket大數(shù)據(jù)傳輸丟失問題及解決

    java socket大數(shù)據(jù)傳輸丟失問題及解決

    這篇文章主要介紹了java socket大數(shù)據(jù)傳輸丟失問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • java在原字符中插入新字符或字符串實例

    java在原字符中插入新字符或字符串實例

    這篇文章主要介紹了java在原字符中插入新字符或字符串實例,具有很好的價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 使用Java如何將文本復(fù)制到剪貼板

    使用Java如何將文本復(fù)制到剪貼板

    這篇文章主要介紹了使用Java如何將文本復(fù)制到剪貼板問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java 交換兩個變量的數(shù)值實現(xiàn)方法

    Java 交換兩個變量的數(shù)值實現(xiàn)方法

    下面小編就為大家?guī)硪黄狫ava 交換兩個變量的數(shù)值實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • 幾種JAVA細(xì)粒度鎖的實現(xiàn)方式

    幾種JAVA細(xì)粒度鎖的實現(xiàn)方式

    這篇文章主要為大家詳細(xì)介紹了幾種JAVA細(xì)粒度鎖的實現(xiàn)方式,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Spring整合SpringMVC與Mybatis(SSM)實現(xiàn)完整登錄功能流程詳解

    Spring整合SpringMVC與Mybatis(SSM)實現(xiàn)完整登錄功能流程詳解

    開學(xué)學(xué)校開始講servlet 后期要求做一個登錄功能,這個使用SSM先只做個簡單的只帶登錄功能的,且項目使用了MyBatis-Plus來簡化開發(fā)流程??辞闆r決定要不要升級功能或者換個寫法
    2022-09-09
  • SpringBoot整合POI導(dǎo)出通用Excel的方法示例

    SpringBoot整合POI導(dǎo)出通用Excel的方法示例

    這篇文章主要介紹了SpringBoot整合POI導(dǎo)出通用Excel的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • java 在觀察者模式中使用泛型T的實例

    java 在觀察者模式中使用泛型T的實例

    下面小編就為大家?guī)硪黄猨ava 在觀察者模式中使用泛型T的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • 關(guān)于TransmittableThreadLocal線程池中線程復(fù)用問題的解決方案

    關(guān)于TransmittableThreadLocal線程池中線程復(fù)用問題的解決方案

    這篇文章主要介紹了關(guān)于TransmittableThreadLocal線程池中線程復(fù)用問題的解決方案,線程池復(fù)用線程,如果子線程執(zhí)行完未移除上下文,則會導(dǎo)致后續(xù)線程可以取到之前線程設(shè)置的屬性,需要的朋友可以參考下
    2023-11-11

最新評論

昌平区| 淅川县| 博爱县| 忻城县| 当涂县| 苗栗县| 三明市| 沁阳市| 金秀| 龙州县| 宁蒗| 蚌埠市| 克东县| 宁明县| 江达县| 白山市| 绥中县| 弋阳县| 色达县| 尚义县| 纳雍县| 马关县| 兴安县| 平湖市| 武平县| 青冈县| 略阳县| 中江县| 达拉特旗| 贞丰县| 武城县| 徐州市| 顺义区| 陆丰市| 泗洪县| 岐山县| 英超| 马尔康县| 厦门市| 吉首市| 文山县|