中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Boot異常統一處理方案設計

發布時間:2024-10-05 11:03:04 來源:億速云 閱讀:87 作者:小樊 欄目:編程語言

設計一個Spring Boot異常統一處理方案,可以提高系統的健壯性和可維護性。以下是一個基本的方案設計:

1. 異常類設計

首先,定義一些自定義異常類,以便更好地管理和處理不同類型的異常。

public class CustomException extends RuntimeException {
    private int errorCode;
    private String errorMessage;

    public CustomException(int errorCode, String errorMessage) {
        super(errorMessage);
        this.errorCode = errorCode;
        this.errorMessage = errorMessage;
    }

    // Getters and setters
}

2. 全局異常處理器

使用@ControllerAdvice注解來創建一個全局異常處理器類,該類將處理所有未被特定控制器處理的異常。

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.getErrorCode(), ex.getErrorMessage());
        return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity<ErrorResponse> handleGenericException(Exception ex) {
        ErrorResponse errorResponse = new ErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR.value(), "An unexpected error occurred");
        return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

3. 錯誤響應類

定義一個錯誤響應類,用于封裝錯誤信息,使其易于前端處理。

public class ErrorResponse {
    private int errorCode;
    private String errorMessage;

    public ErrorResponse(int errorCode, String errorMessage) {
        this.errorCode = errorCode;
        this.errorMessage = errorMessage;
    }

    // Getters and setters
}

4. 自定義注解

如果需要更細粒度的異常處理,可以創建自定義注解。

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomExceptionHandler {
    int errorCode() default 0;
    String errorMessage() default "An error occurred";
}

然后在控制器中使用該注解:

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

@RestController
public class MyController {

    @GetMapping("/test")
    @CustomExceptionHandler(errorCode = 1001, errorMessage = "Test error")
    public String test() {
        throw new CustomException(1001, "Test error");
    }
}

5. 異常日志記錄

為了更好地調試和監控系統,可以在全局異常處理器中記錄異常日志。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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 {

    private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    @ExceptionHandler(CustomException.class)
    public ResponseEntity<ErrorResponse> handleCustomException(CustomException ex) {
        logger.error("CustomException: {}", ex.getMessage(), ex);
        ErrorResponse errorResponse = new ErrorResponse(ex.getErrorCode(), ex.getErrorMessage());
        return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity<ErrorResponse> handleGenericException(Exception ex) {
        logger.error("GenericException: {}", ex.getMessage(), ex);
        ErrorResponse errorResponse = new ErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR.value(), "An unexpected error occurred");
        return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

總結

通過上述設計,可以實現一個基本的Spring Boot異常統一處理方案。該方案包括自定義異常類、全局異常處理器、錯誤響應類、自定義注解以及異常日志記錄。根據具體需求,可以進一步擴展和優化該方案。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

辉县市| 申扎县| 高唐县| 元氏县| 塘沽区| 两当县| 长兴县| 酉阳| 台中县| 西昌市| 苍溪县| 彭泽县| 友谊县| 宾川县| 措美县| 夏津县| 辽中县| 宜良县| 湘乡市| 慈溪市| 宁武县| 黔江区| 浙江省| 拉孜县| 温州市| 勐海县| 乌拉特前旗| 哈密市| 浙江省| 北流市| 称多县| 侯马市| 利川市| 峨山| 清苑县| 东阳市| 灵川县| 石渠县| 金昌市| 南召县| 天门市|