From 2f690eb3cb352c54d28aabc2588f3955e4910175 Mon Sep 17 00:00:00 2001 From: Marcel Raddatz Date: Sat, 4 Apr 2026 18:18:27 +0200 Subject: [PATCH] feat(common): add ForbiddenException with 403 handler Co-Authored-By: Claude Sonnet 4.6 --- .../main/java/com/recipeapp/common/ForbiddenException.java | 7 +++++++ .../java/com/recipeapp/common/GlobalExceptionHandler.java | 6 ++++++ 2 files changed, 13 insertions(+) create mode 100644 backend/src/main/java/com/recipeapp/common/ForbiddenException.java diff --git a/backend/src/main/java/com/recipeapp/common/ForbiddenException.java b/backend/src/main/java/com/recipeapp/common/ForbiddenException.java new file mode 100644 index 0000000..fcce6a6 --- /dev/null +++ b/backend/src/main/java/com/recipeapp/common/ForbiddenException.java @@ -0,0 +1,7 @@ +package com.recipeapp.common; + +public class ForbiddenException extends RuntimeException { + public ForbiddenException(String message) { + super(message); + } +} diff --git a/backend/src/main/java/com/recipeapp/common/GlobalExceptionHandler.java b/backend/src/main/java/com/recipeapp/common/GlobalExceptionHandler.java index a196419..56c1e02 100644 --- a/backend/src/main/java/com/recipeapp/common/GlobalExceptionHandler.java +++ b/backend/src/main/java/com/recipeapp/common/GlobalExceptionHandler.java @@ -32,6 +32,12 @@ public class GlobalExceptionHandler { .body(ApiError.of("CONFLICT", ex.getMessage())); } + @ExceptionHandler(ForbiddenException.class) + public ResponseEntity handleForbidden(ForbiddenException ex) { + return ResponseEntity.status(HttpStatus.FORBIDDEN) + .body(ApiError.of("FORBIDDEN", ex.getMessage())); + } + @ExceptionHandler(ValidationException.class) public ResponseEntity handleBusinessValidation(ValidationException ex) { return ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY)