精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SpringBoot全局異常處理知多少?詳細介紹處理方法,附相關源代碼

開發 架構
在本文中,我將詳細介紹Spring Boot全局異常處理的方法,并提供源代碼和相關說明。

Spring Boot提供了一種簡單且靈活的方式來處理應用程序中的異常,即全局異常處理。全局異常處理允許我們定義一個統一的異常處理器,以捕獲應用程序中發生的所有異常,并提供自定義的錯誤響應。

在本文中,我將詳細介紹Spring Boot全局異常處理的方法,并提供源代碼和相關說明。

一、創建全局異常處理器

首先,我們需要創建一個全局異常處理器。我們可以通過實現ErrorController接口或使用@ControllerAdvice注解來創建全局異常處理器。

1、實現ErrorController接口

我們可以創建一個類,實現ErrorController接口,并重寫getErrorPath()errorHandle()方法來處理異常。

import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GlobalErrorController implements ErrorController {

    private static final String PATH = "/error";

    @RequestMapping(value = PATH)
    public String errorHandle() {
        // 處理異常邏輯
        return "Error handling logic goes here";
    }

    @Override
    public String getErrorPath() {
        return PATH;
    }
}

在上面的代碼中,我們創建了一個名為GlobalErrorController的類,它實現了ErrorController接口。我們使用@RestController注解將該類標記為一個控制器,并使用@RequestMapping注解來映射處理異常的路徑為/error。在errorHandle()方法中,我們可以編寫自定義的異常處理邏輯。

2、使用@ControllerAdvice注解

另一種創建全局異常處理器的方法是使用@ControllerAdvice注解。我們可以創建一個帶有@ControllerAdvice注解的類,并在其中定義一個或多個帶有@ExceptionHandler注解的方法來處理異常。

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public String handleException(Exception e) {
        // 處理異常邏輯
        return "Error handling logic goes here";
    }
}

在上面的代碼中,我們創建了一個名為GlobalExceptionHandler的類,并使用@ControllerAdvice注解將其標記為全局異常處理器。我們使用@ExceptionHandler注解來指定要處理的異常類型,并在方法中編寫自定義的異常處理邏輯。

二、配置全局異常處理器

接下來,我們需要將全局異常處理器配置到Spring Boot應用程序中。我們可以通過創建一個配置類,并使用@EnableWebMvc注解或實現WebMvcConfigurer接口來配置全局異常處理器。

1、使用@EnableWebMvc注解

我們可以創建一個配置類,并使用@EnableWebMvc注解來啟用全局異常處理器。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@EnableWebMvc
public class WebConfig {

}

在上面的代碼中,我們創建了一個名為WebConfig的配置類,并使用@EnableWebMvc注解來啟用全局異常處理器。

2、實現WebMvcConfigurer接口

另一種配置全局異常處理器的方法是創建一個配置類,并實現WebMvcConfigurer接口。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
        resolvers.add(new GlobalExceptionHandler());
    }
}

在上面的代碼中,我們創建了一個名為WebConfig的配置類,并實現了WebMvcConfigurer接口。我們重寫了configureHandlerExceptionResolvers()方法,并將全局異常處理器添加到異常解析器列表中。

三、自定義異常處理邏輯

在全局異常處理器中,我們可以編寫自定義的異常處理邏輯。以下是一些常見的處理邏輯示例:

1、返回自定義錯誤信息

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleException(Exception e) {
        String errorMessage = "An error occurred: " + e.getMessage();
        return new ResponseEntity<>(errorMessage, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

在上面的代碼中,我們使用@RestControllerAdvice注解將GlobalExceptionHandler類標記為全局異常處理器。在handleException()方法中,我們可以捕獲所有的Exception異常,并返回一個包含自定義錯誤信息的ResponseEntity對象。

2、返回自定義錯誤對象

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ResponseEntity<ErrorResponse> handleException(Exception e) {
        ErrorResponse errorResponse = new ErrorResponse("An error occurred", e.getMessage());
        return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

在上面的代碼中,我們創建了一個名為ErrorResponse的自定義錯誤對象,并在handleException()方法中返回該對象。該對象包含了自定義的錯誤信息和異常消息。

3、返回統一的錯誤格式

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ResponseEntity<ErrorResponse> handleException(Exception e) {
        ErrorResponse errorResponse = new ErrorResponse("An error occurred", e.getMessage());
        return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
    }

    @ExceptionHandler(UserNotFoundException.class)
    public ResponseEntity<ErrorResponse> handleUserNotFoundException(UserNotFoundException e) {
        ErrorResponse errorResponse = new ErrorResponse("User not found", e.getMessage());
        return new ResponseEntity<>(errorResponse, HttpStatus.NOT_FOUND);
    }
}

在上面的代碼中,我們創建了一個名為ErrorResponse的自定義錯誤對象,并在handleException()方法中返回該對象。在handleUserNotFoundException()方法中,我們捕獲了UserNotFoundException異常,并返回一個包含自定義錯誤信息的ResponseEntity對象。

四、異常處理器的優先級

在Spring Boot應用程序中,可以存在多個全局異常處理器。當發生異常時,Spring Boot會根據異常處理器的優先級來選擇合適的處理器。

默認情況下,Spring Boot使用@ControllerAdvice注解的處理器的優先級更高。如果多個處理器都能處理同一類型的異常,Spring Boot將選擇具有最高優先級的處理器。

我們可以使用@Order注解來指定處理器的優先級。優先級值越小,優先級越高。

import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
@Order(1)
public class GlobalExceptionHandler1 {

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleException(Exception e) {
        String errorMessage = "An error occurred: " + e.getMessage();
        return new ResponseEntity<>(errorMessage, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

@RestControllerAdvice
@Order(2)
public class GlobalExceptionHandler2 {

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleException(Exception e) {
        String errorMessage = "An error occurred: " + e.getMessage();
        return new ResponseEntity<>(errorMessage, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

在上面的代碼中,GlobalExceptionHandler1的優先級為1,GlobalExceptionHandler2的優先級為2。當發生異常時,GlobalExceptionHandler1將被選擇為處理器。

五、測試全局異常處理器

最后,我們可以編寫一些測試用例來測試全局異常處理器。

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;

@SpringBootTest
@AutoConfigureMockMvc
public class GlobalExceptionHandlerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testHandleException() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.get("/error"))
                .andExpect(MockMvcResultMatchers.status().isInternalServerError())
                .andExpect(MockMvcResultMatchers.content().string("An error occurred: Internal Server Error"));
    }

    @Test
    public void testHandleUserNotFoundException() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.get("/user/123"))
                .andExpect(MockMvcResultMatchers.status().isNotFound())
                .andExpect(MockMvcResultMatchers.content().string("User not found: 123"));
    }
}

在上面的代碼中,我們使用MockMvc來模擬HTTP請求,并使用MockMvcRequestBuilders構建請求。在testHandleException()方法中,我們發送一個GET請求到/error路徑,并斷言返回的狀態碼為500,內容為"An error occurred: Internal Server Error"。在testHandleUserNotFoundException()方法中,我們發送一個GET請求到/user/123路徑,并斷言返回的狀態碼為404,內容為"User not found: 123"。

這些測試用例可以確保全局異常處理器按預期工作,并返回正確的錯誤信息。

責任編輯:姜華 來源: 今日頭條
相關推薦

2009-09-14 14:17:11

Linq異常處理

2022-03-04 08:31:07

Spring異常處理

2019-09-20 08:38:51

Python編程語言Java

2011-07-21 15:20:41

java異常處理機制

2009-08-05 18:28:05

C#異常處理

2017-08-10 10:28:43

SpringBootSpring

2019-01-24 16:11:19

前端全局異常數據校驗

2025-09-12 09:31:29

2009-07-15 18:06:38

Swing線程

2009-08-31 17:26:32

C#異常處理

2023-12-27 07:53:08

全局異常處理處理應用

2010-03-18 14:46:18

Java SynDem

2009-02-06 14:11:36

ASP.NET.NET全局異常處理

2009-12-17 10:29:04

Ruby異常處理結構

2010-03-29 13:49:40

Nginx圖片處理

2010-03-19 16:51:53

Java Socket

2023-02-21 16:46:04

loongarch架構

2010-01-06 17:12:26

.Net Framew

2019-05-30 09:00:43

神經架構深度學習機器學習

2010-03-10 13:59:40

Python異常處理
點贊
收藏

51CTO技術棧公眾號

69av成年福利视频| 日本福利一区二区| 国产一区免费| 亚洲精品毛片一区二区三区| 首页国产精品| 亚洲成成品网站| 蜜桃免费在线视频| 狂野欧美性猛交xxxxx视频| www国产精品av| 成人在线免费观看视视频| 国产在线综合网| 欧美日韩精品在线一区| 精品日产卡一卡二卡麻豆| 国产精品69页| 黄页在线观看免费| 国产精品毛片久久久久久| 国产精品久久久久免费| 一级特黄aaa大片| 99av国产精品欲麻豆| 视频在线观看99| 97人妻天天摸天天爽天天| 91精品一区| 色综合久久久久综合体| 女人色极品影院| 在线免费黄色| 久久久亚洲综合| 高清国产一区| av天堂一区二区三区| 可以看av的网站久久看| 国内外成人免费激情在线视频网站| 国产一级淫片久久久片a级| 美女福利一区| 精品久久久久久亚洲综合网| 99sesese| 国产精品久久亚洲不卡| 高跟丝袜欧美一区| 欧美中日韩在线| 丝袜美腿av在线| 日韩毛片在线免费观看| 五月婷婷综合色| 国产黄在线看| 久久久精品国产99久久精品芒果| 国产日韩欧美一区二区| 亚洲AV午夜精品| 国产一区二区精品久久| 国产日韩av在线播放| 一区二区三区麻豆| 日本亚洲最大的色成网站www| 欧美专区福利在线| av黄色在线播放| 欧美资源在线| 国产精品1234| 最近中文字幕在线视频| 肉丝袜脚交视频一区二区| 日本亚洲欧美成人| 亚洲精品黑牛一区二区三区| 国产日韩欧美激情| 久久伊人一区二区| 亚洲av成人精品一区二区三区在线播放 | 日韩精品一区二区三区老鸭窝 | 成人污污视频在线观看| 亚洲精品欧美日韩专区| 国产偷拍一区二区| 丰满白嫩尤物一区二区| 国产亚洲精品自在久久| 污污网站免费在线观看| 中文.日本.精品| 欧美性aaa| 欧美专区日韩专区| 免费日韩视频在线观看| free性欧美16hd| 欧美日韩在线一区| 茄子视频成人免费观看| 国精产品一区二区三区有限公司| 欧美日韩在线电影| 俄罗斯女人裸体性做爰| 麻豆一区二区| 国产亚洲一二三区| 3d成人动漫网站| 99国产精品免费视频| eeuss鲁片一区二区三区| 亚洲高清一区二| 欧美熟妇激情一区二区三区| 久久国产影院| 欧美麻豆久久久久久中文| 国产一级做a爱免费视频| 亚洲视频www| 国产美女主播一区| 乱精品一区字幕二区| 久久久久久久久伊人| 在线免费一区| yellow字幕网在线| 欧美日韩中文精品| 日本xxxx免费| 精品久久久亚洲| 欧美人交a欧美精品| 在线天堂中文字幕| 国产一区欧美二区| 久久久国产精品一区二区三区| 毛片网站在线| 亚洲激情av在线| 国产熟女高潮视频| 无人区乱码一区二区三区| 日韩久久精品成人| 国产免费无码一区二区视频| 天堂va蜜桃一区二区三区漫画版 | 日本少妇一区| 日韩欧美激情在线| 极品人妻videosss人妻| 在线国产欧美| 成人性生交大片免费看小说| 欧美一区二区视频| 亚洲狠狠爱一区二区三区| 日本va中文字幕| 韩国精品福利一区二区三区| 北条麻妃一区二区三区中文字幕| 久久精品国产成人av| 国产精品一区二区你懂的| 日韩国产一区久久| 美女的胸无遮挡在线观看| 欧美一区二区三区四区视频| 免费视频91蜜桃| 国产亚洲一区在线| 国产伦精品一区二区三区四区视频| 中文字幕在线播放| 日韩欧美有码在线| 波多野结衣视频播放| 综合在线视频| 成人www视频在线观看| 精华区一区二区三区| 精品国产电影一区| 性色av蜜臀av浪潮av老女人| 中文字幕免费一区二区三区| 国产美女搞久久| 欧美日本高清| 欧美高清www午色夜在线视频| 日本一区二区视频在线播放| 久久成人免费| 麻豆91av| 中文不卡1区2区3区| 日韩av一卡二卡| 日韩av男人天堂| 99久久婷婷国产综合精品电影 | 免费视频一区| 久久国产精品精品国产色婷婷| 97超碰在线免费| 亚洲成人亚洲激情| 日韩精品一卡二卡| 99精品视频中文字幕| 缅甸午夜性猛交xxxx| 国产欧美三级电影| 97不卡在线视频| 日韩一区av| 在线亚洲免费视频| 人妻视频一区二区| 免费成人你懂的| 一区二区三区四区欧美| 色综合一区二区日本韩国亚洲| 日韩一中文字幕| 99精品视频免费看| 亚洲自拍偷拍欧美| 国产精品无码在线| 久久国产精品99国产| 天天综合色天天综合色hd| 亚洲精品555| 久久精品视频在线| 东京干手机福利视频| 午夜精品久久久久久久99水蜜桃 | 亚洲私人黄色宅男| 2025中文字幕| 亚洲综合好骚| 亚洲精品美女久久7777777| 羞羞视频在线观看一区二区| 欧美日本中文字幕| 香蕉视频黄在线观看| 欧美熟乱第一页| 欧美日韩一级大片| 91麻豆文化传媒在线观看| 亚洲色图久久久| 欧美视频二区| 日本亚洲欧洲精品| 欧美2区3区4区| 欧美一级视频一区二区| 伊人免费在线| 亚洲第五色综合网| 自拍偷拍第八页| 亚洲午夜免费电影| 国产三级av在线播放| 国产在线一区观看| av免费中文字幕| 欧美一区不卡| 日本在线观看一区二区| 亚洲不卡视频| 国产精品成av人在线视午夜片| 精品视频在线一区二区| 亚洲精品国产美女| 国产原创中文av| 欧美日韩免费看| 九九精品视频免费| 久久综合色一综合色88| 一区二区三区国产好的精华液| 国产欧美午夜| 国产女人18毛片| 国产一区二区三区日韩精品| 91久久久一线二线三线品牌| 欧美色片在线观看| 69av在线视频| 性欧美videoshd高清| 伊人久久久久久久久久久| 丰满肥臀噗嗤啊x99av| 欧美日韩三级一区二区| 国产性猛交╳xxx乱大交| 亚洲免费色视频| 人妻少妇无码精品视频区| 成人性生交大合| 亚洲va在线va天堂va偷拍| 久久久精品网| 激情五月宗合网| 一区在线播放| 大片在线观看网站免费收看| 成人aaaa| 日韩精品一区二区三区外面 | 99视频在线看| 亚洲自拍另类综合| 日本天堂中文字幕| 中文字幕一区在线观看视频| 国产一二三四五区| 99re热这里只有精品免费视频| 中文写幕一区二区三区免费观成熟| 蜜桃久久久久久久| 美女一区二区三区视频| 三级成人在线视频| 久久久国产欧美| 视频一区欧美日韩| 日韩无套无码精品| 久久高清国产| 国产视频一区二区三区在线播放| 国产日韩欧美一区在线| www..com日韩| 伊人影院久久| 3d动漫一区二区三区| 99热免费精品在线观看| 日韩欧美亚洲天堂| 先锋亚洲精品| 久久久精品三级| 麻豆免费精品视频| 天堂av在线8| 韩国一区二区三区| 免费人成视频在线播放| 国产精品自在在线| 色悠悠在线视频| 成人av第一页| 人妻丰满熟妇aⅴ无码| 91免费版在线看| 免费看污片网站| 国产精品亲子伦对白| 亚洲 欧美 变态 另类 综合| 亚洲女人的天堂| 国产污片在线观看| 都市激情亚洲色图| 国产成人av免费| 8x8x8国产精品| 韩国av免费在线观看| 日韩va亚洲va欧洲va国产| 欧美色18zzzzxxxxx| 伊人伊成久久人综合网站| 免费**毛片在线| 欧美激情在线观看| 中文字幕色婷婷在线视频| 国产精品久久久久7777婷婷| 国产高清精品二区| 久久av一区二区| 日韩一区二区在线| av无码久久久久久不卡网站| 午夜亚洲性色福利视频| 午夜剧场在线免费观看| 国产成a人无v码亚洲福利| 国产熟妇搡bbbb搡bbbb| 中文字幕在线观看不卡| www在线观看黄色| 国产999在线观看| 在线观看欧美| 九九99玖玖| 日本欧美视频| 成年人网站国产| 日韩国产成人精品| 肉丝美足丝袜一区二区三区四| 2023国产精品视频| 国产精品丝袜一区二区| 欧美日韩激情网| 97人妻精品一区二区三区视频 | 亚洲成人最新网站| 日韩欧美视频网站| 狠狠久久亚洲欧美| 亚洲熟妇无码av| 亚洲自拍欧美精品| 中文字幕在线网址| 日韩av在线免播放器| 看黄网站在线| 欧美在线xxx| 亚洲一区网址| 在线视频不卡一区二区| 久久精品亚洲| 久草视频福利在线| 亚洲日本青草视频在线怡红院| 性无码专区无码| 日韩欧美国产三级| 伊人在线视频| 国产99久久精品一区二区永久免费 | 欧美成人嫩草网站| 亚洲一区二区蜜桃| 91在线你懂得| 国产一级免费观看| 欧美一区二区三区影视| 伊人免费在线| 国产精品第100页| 天堂av一区二区三区在线播放 | 日本一区网站| 国产日韩1区| 日本人添下边视频免费| 亚洲乱码国产乱码精品精的特点| 中文亚洲av片在线观看| 亚洲精选在线观看| www.超碰在线| 国产精品美女xx| 午夜精品久久久久99热蜜桃导演| www.cao超碰| 国产精品蜜臀av| 正在播放亚洲精品| 国产一区二区三区网站| 二区三区不卡| 欧美二区三区在线| 亚洲一区二区网站| 女同毛片一区二区三区| 精品国产户外野外| 五月婷婷免费视频| 91精品国产高清自在线看超| 精品亚洲自拍| 男人和女人啪啪网站| av中文字幕在线不卡| 激情综合网五月婷婷| 精品国产一区二区三区四区四| 色帝国亚洲欧美在线| 99久久精品免费看国产四区| 亚洲理论电影网| 肉色超薄丝袜脚交| 一区二区三区免费看视频| 亚洲av综合色区无码一区爱av | 少妇高潮av久久久久久| 亚洲免费精彩视频| 日韩免费小视频| 亚洲高清不卡一区| 国产精品自在在线| 国产大片中文字幕| 亚洲欧美中文在线视频| 91精品国产66| 日本丰满少妇黄大片在线观看| 国产黄色精品网站| 天天插天天操天天干| 亚洲欧美一区二区精品久久久| 视频一区在线免费看| 成年人黄色在线观看| 国产成人免费av在线| 91美女免费看| 最好看的2019的中文字幕视频| 国产成年精品| 免费看国产一级片| 日本一区二区综合亚洲| 国产精品热久久| 久久免费视频网站| 国产精品欧美在线观看| 五月婷婷六月丁香激情| 亚洲一区在线看| 国产一区二区影视| 5g国产欧美日韩视频| 99精品视频免费观看| 日本美女黄色一级片| 精品久久国产老人久久综合| 欧美片第1页| 麻豆一区二区三区在线观看| 91视频在线观看免费| 一本色道久久综合无码人妻| 久久久久免费精品国产| 精品国产91乱码一区二区三区四区 | 国产又色又爽又黄又免费| 国内精品小视频| 色喇叭免费久久综合网| 国产白袜脚足j棉袜在线观看| 在线观看免费一区| 国产高清在线a视频大全| 欧美一区1区三区3区公司| 国产精品一卡二卡在线观看| 久久久精品视频网站| 欧美激情喷水视频| 日韩系列欧美系列| 白丝女仆被免费网站| 日韩精品一区二区三区中文精品| 亚洲人免费短视频| 久久国产精品视频在线观看| 综合久久给合久久狠狠狠97色|