From 92c3e4710616d3257f70bf26603e4583f48ac1ee Mon Sep 17 00:00:00 2001
From: Lukas Karsch <lukas.karsch03@gmail.com>
Date: Mon, 11 Dec 2023 19:23:32 +0100
Subject: [PATCH] #32 handling growbros exception and internal server error

---
 .../controllers/RestErrorHandler.java         | 35 +++++++++++++++++++
 1 file changed, 35 insertions(+)
 create mode 100644 src/main/java/hdm/mi/growbros/controllers/RestErrorHandler.java

diff --git a/src/main/java/hdm/mi/growbros/controllers/RestErrorHandler.java b/src/main/java/hdm/mi/growbros/controllers/RestErrorHandler.java
new file mode 100644
index 0000000..d2a2ce2
--- /dev/null
+++ b/src/main/java/hdm/mi/growbros/controllers/RestErrorHandler.java
@@ -0,0 +1,35 @@
+package hdm.mi.growbros.controllers;
+
+import hdm.mi.growbros.exceptions.GrowBrosException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpHeaders;
+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 org.springframework.web.context.request.WebRequest;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
+
+@ControllerAdvice
+public class RestErrorHandler extends ResponseEntityExceptionHandler {
+    private final static Logger log = LoggerFactory.getLogger(RestErrorHandler.class);
+
+    @ExceptionHandler(GrowBrosException.class)
+    protected ResponseEntity<String> handleGrowBrosException(
+            GrowBrosException e
+    ) {
+        log.error("Handling exception '{}' : {} (Status code {})", e.getClass(), e.getMessage(), e.getStatusCode());
+        return ResponseEntity.status(e.getStatusCode()).body(e.getMessage());
+    }
+
+    @ExceptionHandler
+    protected ResponseEntity<Object> handleInternalServerError(
+            RuntimeException e,
+            WebRequest req
+    ) {
+        log.error("Handling internal server error: {}", e.getClass());
+        log.error("Stacktrace:", e);
+        return handleExceptionInternal(e, "Internal server error", new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR, req);
+    }
+}
-- 
GitLab