成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring Boot 實現(xiàn)異常統(tǒng)一處理

開發(fā) 前端
異常處理方法返回的是包含 ErrorResponse? 對象的 ResponseEntity?,前端可以根據(jù) ErrorResponse? 中的 code? 和 message 字段來處理錯誤信息。

一、引言

在開發(fā)基于 Spring Boot 的應用程序時,異常處理是一個不可忽視的重要環(huán)節(jié)。良好的異常處理機制可以提高系統(tǒng)的健壯性和可維護性,同時為用戶和開發(fā)者提供更友好的錯誤反饋。在傳統(tǒng)的開發(fā)中,我們可能會在每個控制器方法中編寫大量的異常處理代碼,這樣會導致代碼冗余且難以維護。Spring Boot 提供了強大的異常統(tǒng)一處理機制,通過使用注解和特定的類,我們可以將異常處理邏輯集中管理,避免代碼重復,提高開發(fā)效率。

二、Spring Boot 異常處理基礎(chǔ)

在 Spring Boot 中,異常處理主要基于兩個核心概念:@ControllerAdvice 和 @ExceptionHandler。

2.1 @ControllerAdvice

@ControllerAdvice 是一個特殊的 @Component,用于定義 @ExceptionHandler、@InitBinder 和 @ModelAttribute 方法,這些方法將應用到所有使用 @RequestMapping 注解的控制器類中的方法。簡單來說,@ControllerAdvice 是一個全局的異常處理類,它可以捕獲所有控制器中拋出的異常。

2.2 @ExceptionHandler

@ExceptionHandler 注解用于指定處理特定異常的方法。當控制器方法拋出指定類型的異常時,Spring Boot 會自動調(diào)用被 @ExceptionHandler 注解標注的方法來處理該異常。

三、實現(xiàn)異常統(tǒng)一處理的步驟

3.1 創(chuàng)建自定義異常類

首先,我們可以創(chuàng)建自定義異常類,以便在業(yè)務邏輯中拋出特定類型的異常。例如:

public class CustomException extends RuntimeException {
    private int code;
    private String message;

    public CustomException(int code, String message) {
        this.code = code;
        this.message = message;
    }

    public int getCode() {
        return code;
    }

    @Override
    public String getMessage() {
        return message;
    }
}

3.2 創(chuàng)建全局異常處理類

使用 @ControllerAdvice 和 @ExceptionHandler 注解創(chuàng)建全局異常處理類:

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

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(CustomException.class)
    public ResponseEntity<String> handleCustomException(CustomException ex) {
        return new ResponseEntity<>("Custom Exception: Code - " + ex.getCode() + ", Message - " + ex.getMessage(), HttpStatus.BAD_REQUEST);
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleGeneralException(Exception ex) {
        return new ResponseEntity<>("General Exception: " + ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

在上述代碼中,GlobalExceptionHandler 類使用 @ControllerAdvice 注解,表明它是一個全局異常處理類。handleCustomException 方法使用 @ExceptionHandler 注解,專門處理 CustomException 類型的異常,返回一個包含異常信息的 ResponseEntity 對象,狀態(tài)碼為 400 Bad Request。handleGeneralException 方法處理所有其他類型的異常,返回一個包含異常信息的 ResponseEntity 對象,狀態(tài)碼為 500 Internal Server Error。

3.3 在控制器中拋出異常

創(chuàng)建一個簡單的控制器,在其中拋出異常:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @GetMapping("/test")
    public String test() {
        throw new CustomException(1001, "This is a custom exception");
    }
}

當訪問 /test 接口時,控制器方法會拋出 CustomException 異常,該異常會被 GlobalExceptionHandler 類中的 handleCustomException 方法捕獲并處理。

四、返回統(tǒng)一的錯誤響應格式

為了讓前端更容易處理錯誤信息,我們可以定義一個統(tǒng)一的錯誤響應格式。

4.1 創(chuàng)建錯誤響應類

public class ErrorResponse {
    private int code;
    private String message;

    public ErrorResponse(int code, String message) {
        this.code = code;
        this.message = message;
    }

    public int getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
}

4.2 修改全局異常處理類

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

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(CustomException.class)
    public ResponseEntity<ErrorResponse> handleCustomException(CustomException ex) {
        ErrorResponse errorResponse = new ErrorResponse(ex.getCode(), ex.getMessage());
        return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity<ErrorResponse> handleGeneralException(Exception ex) {
        ErrorResponse errorResponse = new ErrorResponse(500, ex.getMessage());
        return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

現(xiàn)在,異常處理方法返回的是包含 ErrorResponse 對象的 ResponseEntity,前端可以根據(jù) ErrorResponse 中的 code 和 message 字段來處理錯誤信息。

五、總結(jié)

通過使用 @ControllerAdvice 和 @ExceptionHandler 注解,我們可以在 Spring Boot 中實現(xiàn)異常的統(tǒng)一處理。這種方式將異常處理邏輯集中管理,避免了代碼冗余,提高了系統(tǒng)的可維護性。同時,定義統(tǒng)一的錯誤響應格式可以讓前端更容易處理錯誤信息,提升用戶體驗。在實際開發(fā)中,我們可以根據(jù)業(yè)務需求創(chuàng)建更多的自定義異常類,并在全局異常處理類中添加相應的處理方法。

責任編輯:武曉燕 來源: 程序員conan
相關(guān)推薦

2024-08-09 08:25:32

Spring流程注解

2019-08-22 14:02:00

Spring BootRestful APIJava

2020-05-26 13:48:05

后端框架異常

2023-12-05 14:10:00

接口可讀性

2021-04-30 07:34:01

Spring BootController項目

2017-05-18 14:14:25

過濾器Spring ClouZuul

2023-11-28 14:32:04

2024-09-25 08:10:00

Spring后端

2020-11-10 10:21:31

架構(gòu)try...catch代碼

2009-06-22 10:41:34

Spring.AOP

2018-04-27 14:18:01

2019-10-09 13:39:39

Python編程語言異常錯誤

2017-07-31 15:47:50

Zuul統(tǒng)一處理

2017-05-19 15:13:05

過濾器Spring ClouZuul

2022-04-08 16:27:48

SpringBoot異常處理

2023-11-30 07:00:56

SpringBoot處理器

2023-11-08 13:33:00

AOP技術(shù)信息

2011-04-20 11:04:23

LinuxHTTP 302

2009-08-27 09:57:24

Power7處理器

2022-05-30 08:03:06

后端參數(shù)校驗異常處理
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 在线一区二区三区 | 视频一区在线 | 国产精品一区一区 | 国产目拍亚洲精品99久久精品 | 91精品国产综合久久婷婷香蕉 | 国产精品三级 | 久久成人精品 | 粉嫩av久久一区二区三区 | 黑人巨大精品欧美黑白配亚洲 | 国产福利视频网站 | 国产91在线播放 | 黄色网址免费在线观看 | 久久国产欧美日韩精品 | 中文字幕一区二区三区精彩视频 | 精品国产欧美一区二区 | 五月激情综合 | 亚洲一区 | 黄a网站| 久久蜜桃av一区二区天堂 | 日韩一区二区三区精品 | 中午字幕在线观看 | 亚洲成人一级片 | 久久精品二区亚洲w码 | 欧美在线观看一区 | 午夜成人免费视频 | 成人a视频片观看免费 | 在线不卡视频 | 综合色影院 | 亚洲午夜精品一区二区三区他趣 | 天天躁日日躁狠狠躁白人 | 亚洲综合在线视频 | 91免费视频观看 | 国产区在线 | 色综合视频 | 欧美阿v| 日韩精品在线播放 | 欧美精品一区二区三区在线 | 日韩视频在线观看中文字幕 | 国产一区二区免费在线 | 国产高清一区二区三区 | 亚洲午夜电影 |