Skip to content

Commit f87291b

Browse files
committed
feat: update global exception handler
1 parent 1ffd303 commit f87291b

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

src/main/java/org/umaxcode/exception/ErrorMessage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@
1010
public class ErrorMessage {
1111

1212
private String path;
13-
private String message;
13+
private Object message;
1414
private String timestamp;
1515
}

src/main/java/org/umaxcode/exception/GlobalExceptionHandler.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,17 @@
22

33
import jakarta.servlet.http.HttpServletRequest;
44
import org.springframework.http.HttpStatus;
5+
import org.springframework.security.access.AccessDeniedException;
6+
import org.springframework.security.core.AuthenticationException;
7+
import org.springframework.validation.FieldError;
8+
import org.springframework.web.bind.MethodArgumentNotValidException;
59
import org.springframework.web.bind.annotation.ExceptionHandler;
610
import org.springframework.web.bind.annotation.ResponseStatus;
711
import org.springframework.web.bind.annotation.RestControllerAdvice;
812

913
import java.time.LocalDateTime;
14+
import java.util.HashMap;
15+
import java.util.Map;
1016

1117
@RestControllerAdvice
1218
public class GlobalExceptionHandler {
@@ -22,6 +28,44 @@ public ErrorMessage taskManagementExceptionHandler(TaskManagementException ex, H
2228
.build();
2329
}
2430

31+
@ExceptionHandler(AuthenticationException.class)
32+
@ResponseStatus(HttpStatus.UNAUTHORIZED)
33+
public ErrorMessage authenticationExceptionHandler(AuthenticationException ex, HttpServletRequest request) {
34+
35+
return ErrorMessage.builder()
36+
.path(request.getRequestURI())
37+
.message(ex.getMessage())
38+
.timestamp(LocalDateTime.now().toString())
39+
.build();
40+
}
41+
42+
@ExceptionHandler(AccessDeniedException.class)
43+
@ResponseStatus(HttpStatus.FORBIDDEN)
44+
public ErrorMessage accessDeniedHandler(AccessDeniedException ex, HttpServletRequest request) {
45+
46+
return ErrorMessage.builder()
47+
.path(request.getRequestURI())
48+
.message("You do not have permission to access this resource.")
49+
.timestamp(LocalDateTime.now().toString())
50+
.build();
51+
}
52+
53+
@ExceptionHandler(MethodArgumentNotValidException.class)
54+
public ErrorMessage handleArgumentNotValidException(MethodArgumentNotValidException ex, HttpServletRequest request) {
55+
56+
Map<String, String> errors = new HashMap<>();
57+
58+
for (FieldError error : ex.getBindingResult().getFieldErrors()) {
59+
errors.put(error.getField(), error.getDefaultMessage());
60+
}
61+
62+
return ErrorMessage.builder()
63+
.path(request.getRequestURI())
64+
.message(errors)
65+
.timestamp(LocalDateTime.now().toString())
66+
.build();
67+
}
68+
2569
@ExceptionHandler(Exception.class)
2670
@ResponseStatus(HttpStatus.NOT_FOUND)
2771
public ErrorMessage exceptionHandler(Exception ex, HttpServletRequest request) {

0 commit comments

Comments
 (0)