欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot 工程中的異常處理方式

 更新時間:2021年02月14日 11:31:58   作者:亮亮  
這篇文章主要介紹了SpringBoot 工程中的異常處理方式,幫助大家更好的理解和學習使用springboot框架,感興趣的朋友可以了解下

背景分析

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

異常處理分析

概述

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

處理規(guī)范

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

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

SpringBoot 工程下的異常處理

準備工作

第一步:創(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,檢測輸出結果。

Result is 5

默認異常處理

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

對于這樣的默認異常處理(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語句進行異常處理會帶來大量重復代碼的編寫,不易維護。

Controller內部定義異常處理方法

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

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

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

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

當項目由多個控制層類中有多個共性異常的處理方法定義時,我們可以將這些方法提取到公共的父類對象中,但是這種方式是一種強耦合的實現(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 注解描述的類為全局異常處理類,當控制層方法中的異常沒有自己捕獲,也沒有定義其內部的異常處理方法,底層默認會查找全局異常處理類,調用對應的異常處理方法進行異常處理。如圖所示:

總結(Summary)

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

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

相關文章

  • Java編程—在測試中考慮多態(tài)

    Java編程—在測試中考慮多態(tài)

    這篇文章主要介紹了Java編程—在測試中考慮多態(tài),具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Java與Oracle實現(xiàn)事務(JDBC事務)實例詳解

    Java與Oracle實現(xiàn)事務(JDBC事務)實例詳解

    這篇文章主要介紹了Java與Oracle實現(xiàn)事務(JDBC事務)實例詳解的相關資料,需要的朋友可以參考下
    2017-05-05
  • Java反射機制實例代碼分享

    Java反射機制實例代碼分享

    這篇文章主要介紹了Java反射機制實例代碼分享,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • java設計模式之單例模式解析

    java設計模式之單例模式解析

    這篇文章主要為大家詳細介紹了java設計模式之單例模式的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Java反射獲取所有Controller和RestController類的方法

    Java反射獲取所有Controller和RestController類的方法

    這篇文章給大家分享了Java反射獲取所有Controller和RestController類的方法,文中有詳細的代碼示例講解,具有一定的參考價值,需要的朋友可以參考下
    2023-08-08
  • Springboot四種事件監(jiān)聽的實現(xiàn)方式詳解

    Springboot四種事件監(jiān)聽的實現(xiàn)方式詳解

    這篇文章主要介紹了Springboot四種事件監(jiān)聽的實現(xiàn)方式,事件監(jiān)聽是一種機制,可以定義和觸發(fā)自定義的事件,以及在應用程序中注冊監(jiān)聽器來響應這些事件,需要的朋友可以參考下
    2022-06-06
  • SpringBoot線程池ThreadPoolTaskExecutor異步處理百萬級數(shù)據(jù)

    SpringBoot線程池ThreadPoolTaskExecutor異步處理百萬級數(shù)據(jù)

    本文主要介紹了SpringBoot線程池ThreadPoolTaskExecutor異步處理百萬級數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-03-03
  • 代碼詳解java里的“==”和“equels”區(qū)別

    代碼詳解java里的“==”和“equels”區(qū)別

    本篇文章通過實例代碼給大家詳細解釋了java里的“==”和“equels”區(qū)別,對此有興趣的朋友跟著小編一起學習下。
    2018-02-02
  • Springboot集成Actuator監(jiān)控功能詳解

    Springboot集成Actuator監(jiān)控功能詳解

    這篇文章主要介紹了Springboot集成Actuator監(jiān)控功能詳解,有時候我們想要實時監(jiān)控我們的應用程序的運行狀態(tài),比如實時顯示一些指標數(shù)據(jù),觀察每時每刻訪問的流量,或者是我們數(shù)據(jù)庫的訪問狀態(tài)等等,這時候就需要Actuator了,需要的朋友可以參考下
    2023-09-09
  • Spring?Boot?如何正確讀取配置文件屬性

    Spring?Boot?如何正確讀取配置文件屬性

    這篇文章主要介紹了Spring?Boot?如何正確讀取配置文件屬性,項目中經常會經常讀取配置文件中的屬性的值,Spring?Boot提供了很多注解讀取配置文件屬性,那么如何正確使用呢,下文一起來參考下面文章內容吧
    2022-04-04

最新評論