精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

中文在线а√在线8| 69av视频在线观看| jazzjazz国产精品麻豆| 性感美女极品91精品| 欧美三日本三级少妇三99| 最近中文字幕免费观看| 欧美另类视频| 亚洲免费小视频| 在线观看免费不卡av| 国产第一页在线| 图片区小说区国产精品视频| 国产伦精品一区二区三区照片| 欧美一二三区视频| 日韩大片在线观看| 精品卡一卡二卡三卡四在线| 人妻内射一区二区在线视频| 成人影院www在线观看| a级精品国产片在线观看| 国产精品亚洲自拍| 天天做天天爱夜夜爽| 久久久久久免费视频| 日韩黄色av网站| 捷克做爰xxxⅹ性视频| 涩涩视频在线免费看| 综合av第一页| 欧美亚洲一级二级| 蜜臀久久久久久999| 日韩高清中文字幕一区| 久久久久久中文| 战狼4完整免费观看在线播放版| 白白在线精品| 在线电影一区二区三区| 不要播放器的av网站| 丁香花高清在线观看完整版| 国产精品伦一区| 欧美日韩一区二区视频在线 | 色综合久久99| 日韩精品久久一区二区| 日本中文字幕在线观看| 久久免费美女视频| 精品国产综合| 韩国av免费在线观看| 国产一区二区三区观看| 国产精品欧美日韩久久| 无码视频一区二区三区| 国产精品老牛| 91禁外国网站| 日本三级欧美三级| 国产一区日韩一区| 色综合老司机第九色激情| 制服丨自拍丨欧美丨动漫丨| 成人情趣视频网站| 中文字幕日韩精品在线| 中文字幕黄色网址| 日韩欧美视频专区| 日韩在线视频导航| 99热99这里只有精品| 天天综合亚洲| 久久久精品一区二区| 中文字幕观看av| 天天影视欧美综合在线观看| 欧美成人三级视频网站| 天堂网avav| 中文字幕一区二区三三| 欧美激情乱人伦一区| 久草视频手机在线观看| 激情综合在线| 97香蕉超级碰碰久久免费软件 | 欧美 日韩 国产 成人 在线观看| 丝袜连裤袜欧美激情日韩| 亚洲精品av在线| 中文字幕丰满孑伦无码专区| 国产精品片aa在线观看| 一二美女精品欧洲| 欧美精品久久久久久久久46p| 欧美不卡在线| 91精品国产99| 亚洲av综合一区| 国模一区二区三区白浆| 高清不卡日本v二区在线| 熟妇人妻av无码一区二区三区| 91在线国内视频| 神马影院我不卡| 成人影院在线观看| 调教+趴+乳夹+国产+精品| 日韩手机在线观看视频| 欧美××××黑人××性爽 | 国产成人自拍视频在线观看| 亚洲一区二区色| 国产成人在线视频网站| 欧美福利一区二区三区| 网友自拍视频在线| 亚洲小说欧美激情另类| 任你操这里只有精品| 成人51免费| 精品在线欧美视频| 日韩a级片在线观看| 性欧美精品高清| 91精品中文在线| 奇米影视888狠狠狠777不卡| 中文字幕在线视频一区| 青草视频在线观看视频| 99精品国自产在线| 亚洲第一男人av| 天堂av网手机版| 亚洲性人人天天夜夜摸| 国产精品久久久久久久久久尿| 国产黄色片av| 日本一区二区三区国色天香 | 奇米影视在线99精品| 国产传媒一区二区| 在线免费看av| 色综合久久99| 妖精视频一区二区| 亚州av乱码久久精品蜜桃| 欧美最猛性xxxx| 亚洲AV无码乱码国产精品牛牛| 中国色在线观看另类| 天堂…中文在线最新版在线| 白嫩亚洲一区二区三区| 亚洲欧美日韩视频一区| 久久久久亚洲av无码专区| 蜜桃视频在线一区| 免费一区二区三区在在线视频| 中文字幕资源网在线观看| 欧美日韩中文精品| 在线观看国产精品一区| 国产欧美综合一区二区三区| aa日韩免费精品视频一| 国产人成网在线播放va免费| 欧美日韩一区小说| 欧美丰满老妇熟乱xxxxyyy| 国产亚洲亚洲| 国产一区二区中文字幕免费看| 影院在线观看全集免费观看| 欧美日韩精品免费观看视频| 亚洲精品国产一区黑色丝袜| 免费在线欧美黄色| 久久久久网址| 一二三四视频在线中文| 亚洲精品国产综合久久| 日韩成人av毛片| 北岛玲一区二区三区四区| 青草网在线观看| 中文字幕区一区二区三| 色综合视频网站| xxxwww在线观看| 亚洲午夜电影网| 亚洲激情 欧美| 亚洲高清av| 久久99精品国产一区二区三区| 欧美xxxx少妇| 精品国产99国产精品| 日韩精品一区二区三| 不卡一区中文字幕| 亚洲人精品午夜射精日韩| 农村少妇一区二区三区四区五区| 国内精品久久久久影院 日本资源| 国产成人手机在线| 精品国产乱码久久久久久婷婷 | 国产精品欧美日韩一区| 国产精品美女www爽爽爽视频| 国产大片在线免费观看| 欧美亚洲日本国产| 国精品人伦一区二区三区蜜桃| 国内外成人在线| 欧美乱做爰xxxⅹ久久久| 国产图片一区| 日本精品视频在线| 婷婷视频在线| 精品国产乱码久久久久久久| 九九九在线观看| 国产婷婷色一区二区三区四区 | 亚洲国产合集| 2019中文在线观看| 国产1区2区3区在线| 欧美日韩高清一区| 久久黄色小视频| 久久综合色婷婷| 小泽玛利亚视频在线观看| 亚洲91精品| 精品国产一区二区三区四区vr| 国产成人精品123区免费视频| 深夜福利国产精品| 亚洲精品网站在线| 91久久精品一区二区二区| 亚洲欧美另类日本| av不卡免费在线观看| www.com操| 亚洲国产综合在线看不卡| 日本日本精品二区免费| 日韩精品一区二区三区中文| 91wwwcom在线观看| 黄色免费在线观看网站| 欧美精品一区二区久久婷婷| 免费黄色一级大片| 亚洲自拍偷拍av| 欧美国产丝袜视频| 成人疯狂猛交xxx| 青春草视频在线| 亚洲欧美综合图区| 国产ts变态重口人妖hd| 欧美日韩在线视频一区| 天天操夜夜操av| 久久亚洲综合色| 丰满饥渴老女人hd| 久久精品一区二区国产| 男人的天堂视频在线| 精品国产一级毛片| 国产伦精品一区二区三区在线 | 亚洲午夜羞羞片| 天天舔天天操天天干| 9久草视频在线视频精品| 国产美女18xxxx免费视频| 久久久久免费| 3d动漫一区二区三区| 亚洲乱码电影| 亚洲乱码一区二区三区| 无码日韩精品一区二区免费| 999国内精品视频在线| jizz亚洲女人高潮大叫| 欧美一级黑人aaaaaaa做受| 日本理论片午伦夜理片在线观看| 亚洲人永久免费| 婷婷五月综合激情| 精品第一国产综合精品aⅴ| 97视频免费在线| 91福利精品第一导航| 久久久久亚洲av成人毛片韩| 亚洲乱码国产乱码精品精的特点| 亚洲aaa视频| 欧美激情一区二区三区蜜桃视频| 久久中文字幕人妻| www.亚洲在线| 日本黄色免费观看| 成人福利在线看| 992tv人人草| 视频一区欧美日韩| 超碰影院在线观看| 久久精品免费| 国产成人精品视频ⅴa片软件竹菊| 国产精品日韩精品欧美精品| 玩弄中年熟妇正在播放| 亚洲综合三区| 国产资源在线视频| 国产日韩亚洲欧美精品| 凹凸国产熟女精品视频| 免费日韩av片| 欧美一级特黄a| 久久精品72免费观看| 亚洲精品在线视频播放| 国产一区二区视频在线播放| 日本中文字幕在线不卡| 国产乱码精品一区二区三区av | 国产无套粉嫩白浆内谢| 亚洲va天堂va国产va久| 男女啊啊啊视频| 色八戒一区二区三区| 国产日韩在线免费观看| 国产日韩一区二区三免费高清| 欧美激情亚洲国产| 丁香花高清在线观看完整版| 韩国精品久久久999| а√在线天堂官网| 国产91精品最新在线播放| 成人1区2区| 91久久国产精品91久久性色| 日韩影片在线观看| 精品综合在线| 日本a口亚洲| 9色视频在线观看| 一本久道久久综合狠狠爱| av免费中文字幕| 日本亚洲免费观看| 午夜激情视频网| 91视频国产资源| 国内毛片毛片毛片毛片毛片| 一区二区三区精密机械公司| 97免费在线观看视频| 在线亚洲欧美专区二区| 国产欧美一级片| 精品亚洲一区二区三区在线观看| av影片在线看| 久久久久久com| 校园春色亚洲色图| 亚洲999一在线观看www| 日韩成人动漫在线观看| 自拍另类欧美| 国产精品久久久久久久久久妞妞| the porn av| 99热国产精品| 免费精品视频一区二区三区| 日韩系列在线| 一区二区欧美日韩| 伊人久久大香线蕉综合热线 | 精品无码黑人又粗又大又长| 日韩欧美一区视频| 精品国产免费无码久久久| 精品视频—区二区三区免费| dy888亚洲精品一区二区三区| 奇米影视亚洲狠狠色| 久久伊人精品| 日韩亚洲视频在线| 亚洲精选在线| 中文字幕在线视频一区二区| 久久久亚洲综合| 国产一级特黄a高潮片| 欧美日本在线看| 欧美成人免费| 午夜美女久久久久爽久久| 国产一区二区三区黄网站| 日韩av电影免费在线| 亚洲三级免费| 乱码一区二区三区| 日韩美女视频19| 中文字幕在线播放日韩| 亚洲色在线视频| 午夜裸体女人视频网站在线观看| 91丨九色丨国产| 久久精品一区二区不卡| 亚洲色图38p| 91丨九色丨蝌蚪富婆spa| 国产在线视频你懂的| 日韩亚洲欧美高清| 蜜桃精品成人影片| 国产精品第五页| 日韩不卡高清视频| 国产亚洲精品综合一区91| 欧美大胆a人体大胆做受| 99精品国产高清一区二区| 久久人体视频| 日韩一区二区三区久久| 日本一区二区视频在线观看| 一级黄色免费网站| 亚洲另类激情图| 中文字幕在线直播| 九色一区二区| 性色一区二区| 男人操女人动态图| 日本丶国产丶欧美色综合| 国产美女视频一区二区三区| 热久久免费国产视频| 日韩三级视频| 欧洲av无码放荡人妇网站| 久久久综合视频| 国产第一页在线观看| 亚洲性无码av在线| 成人全视频免费观看在线看| 亚洲成人av动漫| 久久99久久久久| 高h视频免费观看| 精品福利av导航| 国产美女精品写真福利视频| 美女亚洲精品| 久热综合在线亚洲精品| 色屁屁草草影院ccyy.com| 欧美日韩国产经典色站一区二区三区 | 精品国产免费久久| 精品中文字幕在线播放| 狠狠综合久久av一区二区小说| 日韩二区三区| 国产精品极品尤物在线观看| 日韩dvd碟片| 国模大尺度视频| 精品久久久精品| 高清中文字幕一区二区三区| 国产区亚洲区欧美区| 欧美成人首页| 99re久久精品国产| 欧美视频你懂的| 伊人手机在线| 久久一区二区三区欧美亚洲| 青青草97国产精品免费观看无弹窗版| 91n在线视频| 精品裸体舞一区二区三区| 欲香欲色天天天综合和网| 亚洲黄色一区二区三区| 国产成人aaaa| 欧美日韩综合一区二区三区| 久久深夜福利免费观看| 精品国产一区二区三区不卡蜜臂| 丁香婷婷激情网| 亚洲乱码国产乱码精品精98午夜| 香蕉视频成人在线| 国产男人精品视频| 亚洲精选国产| 亚洲一级二级片| 日韩激情在线视频| 亚洲资源在线| av动漫免费看| 一区二区三区av电影| 国产三区四区在线观看| 国产经典一区二区三区| 日韩精品电影在线| 国产性一乱一性一伧一色| 国产午夜精品全部视频播放| 91成人福利| 中日韩av在线播放| 一本色道久久综合精品竹菊| 污污的网站在线免费观看|