From 42ccf285144e1a05d5071a25e1bc5641192bd8ea Mon Sep 17 00:00:00 2001 From: Geonhee Min Date: Tue, 4 Nov 2025 00:05:24 +0000 Subject: [PATCH] =?UTF-8?q?issue=20#=20=EC=97=90=EB=9F=AC=20=ED=95=B8?= =?UTF-8?q?=EB=93=A4=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduler/config/ExceptionHandler.java | 48 +++++++++++++++++++ .../scheduler/{utils => }/exception/.gitkeep | 0 .../scheduler/exception/AuthException.java | 7 +++ .../exception/BusinessException.java | 7 +++ .../exception/ValidationException.java | 7 +++ 5 files changed, 69 insertions(+) create mode 100644 src/main/java/com/baekyangdan/scheduler/config/ExceptionHandler.java rename src/main/java/com/baekyangdan/scheduler/{utils => }/exception/.gitkeep (100%) create mode 100644 src/main/java/com/baekyangdan/scheduler/exception/AuthException.java create mode 100644 src/main/java/com/baekyangdan/scheduler/exception/BusinessException.java create mode 100644 src/main/java/com/baekyangdan/scheduler/exception/ValidationException.java diff --git a/src/main/java/com/baekyangdan/scheduler/config/ExceptionHandler.java b/src/main/java/com/baekyangdan/scheduler/config/ExceptionHandler.java new file mode 100644 index 0000000..bc22001 --- /dev/null +++ b/src/main/java/com/baekyangdan/scheduler/config/ExceptionHandler.java @@ -0,0 +1,48 @@ +package com.baekyangdan.scheduler.config; + +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 java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; + +public class ExceptionHandler { + // 에러 핸들러 목록 + // 1. 비즈니스 로직 관련 예외 처리 + // ex) 중복 데이터 + @ExceptionHandler(BusinessException.class) + public ResponseEntity> handleBusinessException(BusinessException e) { + Map body = new HashMap<>(); + body.put("message", e.getMessage()); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(body); + } + + // 2. 입력값 유효성 검사 관련 예외 처리 + // ex) 데이터 타입 검사 + @ExceptionHandler(ValidationException.class) + public ResponseEntity> handleValidationException(ValidationException e) { + Map body = new HashMap<>(); + body.put("message", e.getMessage()); + return ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY).body(body); + } + + // 3. 권한/인가 관련 예외 처리 + // ex) 로그인이 필요한 서비스에 로그인 안 한 사람이 호출 + @ExceptionHandler(AuthException.class) + public ResponseEntity> handleValidationException(ValidationException e) { + Map body = new HashMap<>(); + body.put("message", e.getMessage()); + return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(body); + } + + // 4. 기타 예외 처리 + @ExceptionHandler(Exception.class) + public ResponseEntity> handleDefaultException(Exception e) { + Map body = new HashMap<>(); + body.put("message", e.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(body); + } +} \ No newline at end of file diff --git a/src/main/java/com/baekyangdan/scheduler/utils/exception/.gitkeep b/src/main/java/com/baekyangdan/scheduler/exception/.gitkeep similarity index 100% rename from src/main/java/com/baekyangdan/scheduler/utils/exception/.gitkeep rename to src/main/java/com/baekyangdan/scheduler/exception/.gitkeep diff --git a/src/main/java/com/baekyangdan/scheduler/exception/AuthException.java b/src/main/java/com/baekyangdan/scheduler/exception/AuthException.java new file mode 100644 index 0000000..66ecc09 --- /dev/null +++ b/src/main/java/com/baekyangdan/scheduler/exception/AuthException.java @@ -0,0 +1,7 @@ +package com.baekyangdan.scheduler.exception; + +public class AuthException extends RuntimeException { + public AuthException(String message) { + super(message); + } +} \ No newline at end of file diff --git a/src/main/java/com/baekyangdan/scheduler/exception/BusinessException.java b/src/main/java/com/baekyangdan/scheduler/exception/BusinessException.java new file mode 100644 index 0000000..27e2421 --- /dev/null +++ b/src/main/java/com/baekyangdan/scheduler/exception/BusinessException.java @@ -0,0 +1,7 @@ +package com.baekyangdan.scheduler.exception; + +public class BusinessException extends RuntimeException { + public BusinessException(String message) { + super(message); + } +} \ No newline at end of file diff --git a/src/main/java/com/baekyangdan/scheduler/exception/ValidationException.java b/src/main/java/com/baekyangdan/scheduler/exception/ValidationException.java new file mode 100644 index 0000000..0301b54 --- /dev/null +++ b/src/main/java/com/baekyangdan/scheduler/exception/ValidationException.java @@ -0,0 +1,7 @@ +package com.baekyangdan.scheduler.exception; + +public class ValidationException extends RuntimeException { + public ValidationException(String message) { + super(message); + } +} \ No newline at end of file