From 615c8a0fc8d2b35da7df90115456d33444104c41 Mon Sep 17 00:00:00 2001 From: Kevin J Hoerr Date: Thu, 27 Jan 2022 14:12:29 -0500 Subject: Add error handling --- .../submelon/pantry/CustomControllerAdvice.java | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/main/java/dev/submelon/pantry/CustomControllerAdvice.java (limited to 'src/main/java/dev/submelon/pantry/CustomControllerAdvice.java') 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 handleNullPointerExceptions( + NoSuchElementException e + ) { + HttpStatus status = HttpStatus.NOT_FOUND; + + return new ResponseEntity<>( + new ErrorResponse(status, e.getMessage()), + status + ); + } + + @ExceptionHandler(Exception.class) + public ResponseEntity 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 + ); + } +} -- cgit