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 ); } }