From f87291ba8b546a5391f508492c77d49ad237d385 Mon Sep 17 00:00:00 2001 From: umaxcode Date: Fri, 17 Jan 2025 14:57:49 +0000 Subject: [PATCH] feat: update global exception handler --- .../org/umaxcode/exception/ErrorMessage.java | 2 +- .../exception/GlobalExceptionHandler.java | 44 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/umaxcode/exception/ErrorMessage.java b/src/main/java/org/umaxcode/exception/ErrorMessage.java index 3e77f14..0596ede 100644 --- a/src/main/java/org/umaxcode/exception/ErrorMessage.java +++ b/src/main/java/org/umaxcode/exception/ErrorMessage.java @@ -10,6 +10,6 @@ public class ErrorMessage { private String path; - private String message; + private Object message; private String timestamp; } diff --git a/src/main/java/org/umaxcode/exception/GlobalExceptionHandler.java b/src/main/java/org/umaxcode/exception/GlobalExceptionHandler.java index e744276..af1afbd 100644 --- a/src/main/java/org/umaxcode/exception/GlobalExceptionHandler.java +++ b/src/main/java/org/umaxcode/exception/GlobalExceptionHandler.java @@ -2,11 +2,17 @@ import jakarta.servlet.http.HttpServletRequest; import org.springframework.http.HttpStatus; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.core.AuthenticationException; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestControllerAdvice; import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; @RestControllerAdvice public class GlobalExceptionHandler { @@ -22,6 +28,44 @@ public ErrorMessage taskManagementExceptionHandler(TaskManagementException ex, H .build(); } + @ExceptionHandler(AuthenticationException.class) + @ResponseStatus(HttpStatus.UNAUTHORIZED) + public ErrorMessage authenticationExceptionHandler(AuthenticationException ex, HttpServletRequest request) { + + return ErrorMessage.builder() + .path(request.getRequestURI()) + .message(ex.getMessage()) + .timestamp(LocalDateTime.now().toString()) + .build(); + } + + @ExceptionHandler(AccessDeniedException.class) + @ResponseStatus(HttpStatus.FORBIDDEN) + public ErrorMessage accessDeniedHandler(AccessDeniedException ex, HttpServletRequest request) { + + return ErrorMessage.builder() + .path(request.getRequestURI()) + .message("You do not have permission to access this resource.") + .timestamp(LocalDateTime.now().toString()) + .build(); + } + + @ExceptionHandler(MethodArgumentNotValidException.class) + public ErrorMessage handleArgumentNotValidException(MethodArgumentNotValidException ex, HttpServletRequest request) { + + Map errors = new HashMap<>(); + + for (FieldError error : ex.getBindingResult().getFieldErrors()) { + errors.put(error.getField(), error.getDefaultMessage()); + } + + return ErrorMessage.builder() + .path(request.getRequestURI()) + .message(errors) + .timestamp(LocalDateTime.now().toString()) + .build(); + } + @ExceptionHandler(Exception.class) @ResponseStatus(HttpStatus.NOT_FOUND) public ErrorMessage exceptionHandler(Exception ex, HttpServletRequest request) {