From cdf2d7cf7d3527c86b4324a4c728c9ca6a6ea805 Mon Sep 17 00:00:00 2001 From: Marcel Raddatz Date: Mon, 15 Dec 2025 20:14:15 +0000 Subject: [PATCH] add global exception handler --- .../controller/GlobalExceptionHandler.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 workspaces/backend/src/main/java/org/raddatz/familienarchiv/controller/GlobalExceptionHandler.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/controller/GlobalExceptionHandler.java b/workspaces/backend/src/main/java/org/raddatz/familienarchiv/controller/GlobalExceptionHandler.java new file mode 100644 index 00000000..3f438b05 --- /dev/null +++ b/workspaces/backend/src/main/java/org/raddatz/familienarchiv/controller/GlobalExceptionHandler.java @@ -0,0 +1,40 @@ +package org.raddatz.familienarchiv.controller; + +import java.util.stream.Collectors; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.server.ResponseStatusException; + +import lombok.extern.slf4j.Slf4j; + +@RestControllerAdvice +@Slf4j +public class GlobalExceptionHandler { + + @ExceptionHandler(ResponseStatusException.class) + public ResponseEntity handleStatus(ResponseStatusException ex) { + return ResponseEntity + .status(ex.getStatusCode()) + .body(new ErrorResponse(ex.getReason())); + } + + @ExceptionHandler(MethodArgumentNotValidException.class) + public ResponseEntity handleValidation(MethodArgumentNotValidException ex) { + String message = ex.getBindingResult().getFieldErrors().stream() + .map(e -> e.getField() + ": " + e.getDefaultMessage()) + .collect(Collectors.joining(", ")); + return ResponseEntity.badRequest().body(new ErrorResponse(message)); + } + + @ExceptionHandler(Exception.class) + public ResponseEntity handleGeneric(Exception ex) { + log.error("Unhandled exception", ex); + return ResponseEntity.internalServerError() + .body(new ErrorResponse("Ein Fehler ist aufgetreten")); + } + + public record ErrorResponse(String message) {} +} \ No newline at end of file