偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

一、引言

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

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

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

2.1 @ControllerAdvice

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

2.2 @ExceptionHandler

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

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

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

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

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 注解,表明它是一個(gè)全局異常處理類。handleCustomException 方法使用 @ExceptionHandler 注解,專門處理 CustomException 類型的異常,返回一個(gè)包含異常信息的 ResponseEntity 對(duì)象,狀態(tài)碼為 400 Bad Request。handleGeneralException 方法處理所有其他類型的異常,返回一個(gè)包含異常信息的 ResponseEntity 對(duì)象,狀態(tài)碼為 500 Internal Server Error。

3.3 在控制器中拋出異常

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

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");
    }
}

當(dāng)訪問 /test 接口時(shí),控制器方法會(huì)拋出 CustomException 異常,該異常會(huì)被 GlobalExceptionHandler 類中的 handleCustomException 方法捕獲并處理。

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

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

4.1 創(chuàng)建錯(cuò)誤響應(yī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 對(duì)象的 ResponseEntity,前端可以根據(jù) ErrorResponse 中的 code 和 message 字段來處理錯(cuò)誤信息。

五、總結(jié)

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

責(zé)任編輯:武曉燕 來源: 程序員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項(xiàng)目

2017-05-18 14:14:25

過濾器Spring ClouZuul

2020-11-10 10:21:31

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

2024-09-25 08:10:00

Spring后端

2023-11-28 14:32:04

2018-04-27 14:18:01

2009-06-22 10:41:34

Spring.AOP

2019-10-09 13:39:39

Python編程語言異常錯(cuò)誤

2017-05-19 15:13:05

過濾器Spring ClouZuul

2017-07-31 15:47:50

Zuul統(tǒng)一處理

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ù)校驗(yàn)異常處理
點(diǎn)贊
收藏

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