diff options
Diffstat (limited to 'src/main/java/dev/submelon/pantry/CustomControllerAdvice.java')
| -rw-r--r-- | src/main/java/dev/submelon/pantry/CustomControllerAdvice.java | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/main/java/dev/submelon/pantry/CustomControllerAdvice.java b/src/main/java/dev/submelon/pantry/CustomControllerAdvice.java new file mode 100644 index 0000000..dad961b --- /dev/null +++ b/src/main/java/dev/submelon/pantry/CustomControllerAdvice.java @@ -0,0 +1,46 @@ +package dev.submelon.pantry; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.NoSuchElementException; + +@ControllerAdvice +class CustomControllerAdvice { + @ExceptionHandler(NoSuchElementException.class) + public ResponseEntity<ErrorResponse> handleNullPointerExceptions( + NoSuchElementException e + ) { + HttpStatus status = HttpStatus.NOT_FOUND; + + return new ResponseEntity<>( + new ErrorResponse(status, e.getMessage()), + status + ); + } + + @ExceptionHandler(Exception.class) + public ResponseEntity<ErrorResponse> handleExceptions( + Exception e + ) { + HttpStatus status = HttpStatus.INTERNAL_SERVER_ERROR; + + // converting the stack trace to String + StringWriter stringWriter = new StringWriter(); + PrintWriter printWriter = new PrintWriter(stringWriter); + e.printStackTrace(printWriter); + String stackTrace = stringWriter.toString(); + + return new ResponseEntity<>( + new ErrorResponse( + status, + e.getMessage(), + stackTrace // specifying the stack trace in case of 500s + ), + status + ); + } +} |
