diff --git a/src/main/java/com/vibevault/exception/GlobalExceptionHandler.java b/src/main/java/com/vibevault/exception/GlobalExceptionHandler.java index 04a3d44..5583ab9 100644 --- a/src/main/java/com/vibevault/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/vibevault/exception/GlobalExceptionHandler.java @@ -1,17 +1,18 @@ package com.vibevault.exception; import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.server.ResponseStatusException; -import java.time.LocalDateTime; +import java.util.HashMap; import java.util.Map; /** * 全局异常处理器 - * + * * 需要实现: * - 捕获 ResourceNotFoundException 并返回 404 状态码 * - 捕获 UnauthorizedException 并返回 403 状态码 @@ -21,11 +22,44 @@ import java.util.Map; @RestControllerAdvice public class GlobalExceptionHandler { - // TODO: 实现 ResourceNotFoundException 处理器 (返回 404) + // 处理 ResourceNotFoundException(返回404) + @ExceptionHandler(ResourceNotFoundException.class) + public ResponseEntity> handleResourceNotFound(ResourceNotFoundException ex) { + Map error = buildErrorResponse(ex.getMessage(), HttpStatus.NOT_FOUND); + return new ResponseEntity<>(error, HttpStatus.NOT_FOUND); + } - // TODO: 实现 UnauthorizedException 处理器 (返回 403) + // 处理 UnauthorizedException(返回403) + @ExceptionHandler(UnauthorizedException.class) + public ResponseEntity> handleUnauthorized(UnauthorizedException ex) { + Map error = buildErrorResponse(ex.getMessage(), HttpStatus.FORBIDDEN); + return new ResponseEntity<>(error, HttpStatus.FORBIDDEN); + } - // TODO: 实现 ResponseStatusException 处理器 + // 处理 ResponseStatusException(返回对应状态码) + @ExceptionHandler(ResponseStatusException.class) + public ResponseEntity> handleResponseStatus(ResponseStatusException ex) { + Map error = buildErrorResponse(ex.getReason(), ex.getStatusCode()); + return new ResponseEntity<>(error, ex.getStatusCode()); + } - // TODO [Advanced]: 实现通用异常处理器 -} + // [Advanced] 统一处理其他异常(返回500) + @ExceptionHandler(Exception.class) + public ResponseEntity> handleGenericException(Exception ex) { + Map error = buildErrorResponse( + "An unexpected error occurred: " + ex.getMessage(), + HttpStatus.INTERNAL_SERVER_ERROR + ); + return new ResponseEntity<>(error, HttpStatus.INTERNAL_SERVER_ERROR); + } + + // 构建统一的错误响应格式 + private Map buildErrorResponse(String message, HttpStatusCode status) { + Map error = new HashMap<>(); + error.put("timestamp", java.time.LocalDateTime.now().toString()); + error.put("status", status.value()); + error.put("error", status instanceof HttpStatus ? ((HttpStatus) status).getReasonPhrase() : "Unknown Error"); + error.put("message", message); + return error; + } +} \ No newline at end of file