一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - SpringBoot 工程中的異常處理方式

SpringBoot 工程中的異常處理方式

2021-08-08 14:54亮亮 Java教程

這篇文章主要介紹了SpringBoot 工程中的異常處理方式,幫助大家更好的理解和學習使用springboot框架,感興趣的朋友可以了解下

背景分析

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

異常處理分析

概述

Java項目中處理異常方式無非兩種,要么執行trycatch操作,要么執行throw操作(拋給其它對象處理),無論采用哪種方式,其目的是讓我們的系統對異常要有反饋。但現在的問題是我們如何讓這種反饋代碼的編寫即簡單又直觀、友好。

處理規范

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

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

SpringBoot 工程下的異常處理

準備工作

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

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>

第二步:修改項目訪問端口為80,例如

  1. server.port=80

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

  1. package com.cy.pj.arithmetic.controller;
  2.  
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.bind.annotation.PathVariable;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.ResponseBody;
  7.  
  8. @Controller
  9. public class ArithmeticController {
  10.  
  11. @RequestMapping("doCompute/{n1}/{n2}")
  12. @ResponseBody
  13. public String doCompute(@PathVariable Integer n1,
  14. @PathVariable Integer n2){
  15. Integer result=n1/n2;
  16. return "Result is "+result;
  17. }
  18. }

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

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

  1. Result is 5

默認異常處理

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

SpringBoot 工程中的異常處理方式

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

自己try異常處理

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

  1. @RequestMapping("doCompute/{n1}/{n2}")
  2. @ResponseBody
  3. public String doCompute(@PathVariable Integer n1,
  4. @PathVariable Integer n2){
  5. try{
  6. Integer result=n1/n2;
  7. return "Result is "+result;
  8. }catch(ArithmeticException e){
  9. return "exception is "+e.getMessage();
  10. }
  11. }

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

Controller內部定義異常處理方法

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

  1. @ExceptionHandler(ArithmeticException.class)
  2. @ResponseBody
  3. public String doHandleArithmeticException(ArithmeticException e){
  4. e.printStackTrace();
  5. return "計算過程中出現了異常,異常信息為"+e.getMessage();
  6. }

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

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

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

  1. package com.cy.pj.common.web;
  2.  
  3. @RestControllerAdvice
  4. public class GlobalExceptionHandler {
  5.  
  6. @ExceptionHandler(ArithmeticException.class)
  7. public String doHandleArithmeticException(ArithmeticException e){
  8. e.printStackTrace();
  9. return "計算過程中出現了異常,異常信息為"+e.getMessage();
  10. }
  11. }

其中,@RestControllerAdvice 注解描述的類為全局異常處理類,當控制層方法中的異常沒有自己捕獲,也沒有定義其內部的異常處理方法,底層默認會查找全局異常處理類,調用對應的異常處理方法進行異常處理。如圖所示:

SpringBoot 工程中的異常處理方式

總結(Summary)

本小節主要是對springboot中的異常處理機制進行了簡單分析和講解。目的是掌握springboot工程下的異常處理方式,并基于業務的不同進行響應的異常處理。從而有效提高其用戶體驗,加強系統的容錯能力。

以上就是SpringBoot 工程中的異常處理方式的詳細內容,更多關于SpringBoot 異常處理的資料請關注我們其它相關文章!

原文鏈接:https://segmentfault.com/a/1190000039210700

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国色天香视频完整版 | 韩国三级在线 | 丰满的闺蜜2中文字幕 | 日本68xxxxxxxxx59| 国产精品www | 修修视频在线观看 | 99re热精品这里精品 | 成年人在线观看视频免费 | chanelpreston欧美网站 | 99任你躁精品视频 | 白丝校花被扒开双腿喷水小说 | 国产欧美视频高清va在线观看 | 插插好爽爽爽 | 九9热这里只有真品 | 青草视频免费 | 潘金莲西门庆一级淫片aaaaaa | 91香蕉在线 | 日韩欧美一级大片 | 调教处男| 毛片视频网站在线观看 | 天天av天天翘天天综合网 | 欧美精品一区二区在线观看 | 免费看男人狂躁女人 | 99热这里只有精品在线观看 | 国产精品久久久精品日日 | 国产高清在线视频一区二区三区 | 91香蕉国产在线观看免费永久 | 国产馆精品推荐在线观看 | 国产精品自产拍在线观看2019 | 午夜爱爱爱爱爽爽爽视频网站 | 亚洲国产在线 | 亚洲国产精品一在线观看 | 高跟丝袜人妖sissy露出调教 | 风间由美理论片在线观看 | 亚洲视频在线观看不卡 | 久久天天躁狠狠躁夜夜躁 | 91国语自产拍在线观看 | 99久在线 | 天堂成人在线观看 | 亚州一区二区 | 日本五级床片全都免费播放 |