From d66fb76c482be02b2f186acdeb020beea3e2a94b Mon Sep 17 00:00:00 2001 From: ScarletRedMan Date: Sat, 11 May 2024 16:14:08 +0700 Subject: [PATCH] implemented server side exception handler --- .../ExceptionHandlerController.java | 45 ++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/ru/dragonestia/picker/controller/ExceptionHandlerController.java b/server/src/main/java/ru/dragonestia/picker/controller/ExceptionHandlerController.java index 1fe9cf6..7fbde5a 100644 --- a/server/src/main/java/ru/dragonestia/picker/controller/ExceptionHandlerController.java +++ b/server/src/main/java/ru/dragonestia/picker/controller/ExceptionHandlerController.java @@ -1,9 +1,52 @@ package ru.dragonestia.picker.controller; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; +import ru.dragonestia.picker.exception.*; @RestControllerAdvice public class ExceptionHandlerController { - // TODO + private ResponseEntity error(Exception ex, HttpStatus status) { + return ResponseEntity.status(status) + .header("X-Server-Exception", ex.getClass().getSimpleName()) + .body(ex.getMessage()); + } + + @ExceptionHandler(AdminAccountMutationException.class) + ResponseEntity adminAccountMutation(AdminAccountMutationException ex) { + return error(ex, HttpStatus.LOCKED); + } + + @ExceptionHandler(AlreadyExistsException.class) + ResponseEntity alreadyExistsException(AlreadyExistsException ex) { + return error(ex, HttpStatus.METHOD_NOT_ALLOWED); + } + + @ExceptionHandler(ConflictingPersistParametersException.class) + ResponseEntity conflictingPersistParameter(ConflictingPersistParametersException ex) { + return error(ex, HttpStatus.NOT_ACCEPTABLE); + } + + @ExceptionHandler(DoesNotExistsException.class) + ResponseEntity doesNotExists(DoesNotExistsException ex) { + return error(ex, HttpStatus.NOT_FOUND); + } + + @ExceptionHandler(InvalidIdentifierException.class) + ResponseEntity invalidIdentifier(InvalidIdentifierException ex) { + return error(ex, HttpStatus.BAD_REQUEST); + } + + @ExceptionHandler(NoRoomsAvailableException.class) + ResponseEntity noRoomsAvailable(NoRoomsAvailableException ex) { + return error(ex, HttpStatus.INSUFFICIENT_STORAGE); + } + + @ExceptionHandler(RoomAreFullException.class) + ResponseEntity roomAreFull(RoomAreFullException ex) { + return error(ex, HttpStatus.INSUFFICIENT_STORAGE); + } }