From 44214a819c5f2efb428085976188bff7af8faa30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?lkd9125=28=EC=9D=B4=EA=B2=BD=EB=8F=84=29?= Date: Thu, 11 Jan 2024 13:20:49 +0900 Subject: [PATCH] =?UTF-8?q?ExceptionHandler=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/com/controller/CodeController.java | 12 ++ .../kac/app/exception/AppException.java | 137 ++++++++++++++++++ .../kac/app/exception/ExceptionCode.java | 61 ++++++++ .../kr/co/palnet/kac/app/exception/Level.java | 24 +++ .../app/exception/ServerExceptionHandler.java | 42 ++++++ .../co/palnet/kac/app/exception/Source.java | 6 + .../app/exception/model/BaseErrorModel.java | 14 ++ 7 files changed, 296 insertions(+) create mode 100644 app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/AppException.java create mode 100644 app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/ExceptionCode.java create mode 100644 app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/Level.java create mode 100644 app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/ServerExceptionHandler.java create mode 100644 app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/Source.java create mode 100644 app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/model/BaseErrorModel.java diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/api/com/controller/CodeController.java b/app/kac-app/src/main/java/kr/co/palnet/kac/api/com/controller/CodeController.java index 72d2c0b..6fe225c 100644 --- a/app/kac-app/src/main/java/kr/co/palnet/kac/api/com/controller/CodeController.java +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/api/com/controller/CodeController.java @@ -1,5 +1,7 @@ package kr.co.palnet.kac.api.com.controller; +import kr.co.palnet.kac.app.exception.AppException; +import kr.co.palnet.kac.app.exception.ExceptionCode; import kr.co.palnet.kac.data.com.service.ComCodeDomainService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; @@ -18,4 +20,14 @@ public class CodeController { var test = comCodeDomainService.getComCdGroupBas("test"); return "test"; } + + + // @GetMapping("/exception") + // public void exception(){ + + + // throw new AppException(ExceptionCode.ALREADY_CERT); + // } + + } diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/AppException.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/AppException.java new file mode 100644 index 0000000..e7574a3 --- /dev/null +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/AppException.java @@ -0,0 +1,137 @@ +package kr.co.palnet.kac.app.exception; + +import java.util.Locale; + +import org.springframework.context.MessageSource; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class AppException extends RuntimeException { + + + private static final long serialVersionUID = 1L; + + private final Level level; + + private final Source source; + + private final ExceptionCode errorCode; + + + private final Object[] paramArray; + + private String sourceErrorCode; + + private String sourceErrorMessage; + + public AppException(Throwable th, Level level, Source source, ExceptionCode errorCode, Object... paramArray) { + super(th != null ? th.getMessage() : errorCode.message(), th); + this.level = level; + this.errorCode = errorCode; + this.source = source; + this.paramArray = paramArray; + this.sourceErrorCode = errorCode.code(); + this.sourceErrorMessage = errorCode.message(); + } + + public AppException(Throwable th, Level level, ExceptionCode errorCode, Object... paramArray) { + this(th, level, Source.INTERNAL, errorCode, paramArray); + } + + public AppException(Throwable th, Source source, ExceptionCode errorCode, Object... paramArray) { + this(th, Level.WARN, source, errorCode, paramArray); + } + + public AppException(Throwable th, ExceptionCode errorCode, Object... paramArray) { + this(th, Level.WARN, Source.INTERNAL, errorCode, paramArray); + } + + public AppException(Level level, Source source, String errorCode, Object... paramArray) { + this(null, level, source, errorCode, paramArray); + } + + public AppException(Level level, String errorCode, Object... paramArray) { + this(null, level, Source.INTERNAL, errorCode, paramArray); + } + + public AppException(Source source, String errorCode, Object... paramArray) { + this(null, Level.WARN, source, errorCode, paramArray); + } + + public AppException(ExceptionCode errorCode, Object... paramArray) { + this(null, Level.WARN, Source.INTERNAL, errorCode, paramArray); + } +// public BaseException(String errorCode) { +// this(errorCode, new Object()); +// } + + public AppException(Throwable th, ExceptionCode erorCode, String sourceErrorMessage) { + this(th, Level.WARN, ExceptionCode.INTERNAL_SERVER_ERROR, (Object[])null); + this.sourceErrorCode = erorCode.code(); + this.sourceErrorMessage = errorCode.message(); + } + + public AppException(ExceptionCode sourceErrorCode, String sourceErrorMessage) { + this(null, sourceErrorCode, sourceErrorMessage); + } + + @Deprecated + public AppException(Throwable th, Level level, ExceptionCode errorCode, Source source, Object... paramArray) { + this(th, level, source, errorCode, paramArray); + } + + @Deprecated + public AppException(Level level, ExceptionCode errorCode, Source source, Object... paramArray) { + this(null, level, source, errorCode, paramArray); + } + + public String getCode() { + return errorCode.code(); + } + + public ExceptionCode getErrorCode(){ + return errorCode; + } + + public Object[] getParamArray() { + return paramArray; + } + + public Level getLevel() { + return level; + } + + public Source getSource() { + return source; + } + + public String getErrorMessage(MessageSource ms) { + if (ms == null) { + return ExceptionCode.INTERNAL_SERVER_ERROR.message(); + } + log.debug("############ getErrorMessage : {}",ms); + log.debug("############ getErrorCode : {}",getCode()); + log.debug("############ getParamArray : {}",getParamArray()); + log.debug("############ ErrorCode.NOT_REGIST_ERROR_CODE.message() : {}",ExceptionCode.NOT_REGIST_ERROR_CODE.message()); + log.debug("############ Locale.getDefault() : {}",Locale.getDefault()); + return ms.getMessage(getCode(), getParamArray(), ExceptionCode.NOT_REGIST_ERROR_CODE.message(), Locale.getDefault()); + } + + public String getSourceErrorCode() { + return sourceErrorCode; + } + + public void setSourceErrorCode(String sourceErrorCode) { + this.sourceErrorCode = sourceErrorCode; + } + + public String getSourceErrorMessage() { + return sourceErrorMessage; + } + + public void setSourceErrorMessage(String sourceErrorMessage) { + this.sourceErrorMessage = sourceErrorMessage; + } + +} diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/ExceptionCode.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/ExceptionCode.java new file mode 100644 index 0000000..8816da6 --- /dev/null +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/ExceptionCode.java @@ -0,0 +1,61 @@ +package kr.co.palnet.kac.app.exception; + + +public enum ExceptionCode { + SUCCESS("1", 200, "성공"), + FAIL("-1" , 500, "실패"), + + CREATE_SUCCESS("HC201", 201, "성공"), + + NON_VALID_PARAMETER("VP001", 400, "파라미터가 유효하지 않습니다."), + INTERNAL_SERVER_ERROR("ER500", 500, "내부 시스템 오류"), + + NOT_REGIST_ERROR_CODE("ER501", 500, "등록되지 않은 오류 코드"), + + DATA_NOTFIND("DT001", 204,"데이터 를 찾을수 없습니다."), + DATA_DUPLICATE("DT002", 500, "중복 데이터가 존재합니다."), + DATA_NO("DT003", 500, "데이터 미존재"), + + ALREADY_CERT("CT001", 200, "이미 인증 되어있는 값 입니다."), + + DB_ERROR("DB001", 500, "디비 처리중 오류"), + + TIME_OUT("T001", 400, "인증 시간 초과"), + + FILE_ERROR("F001", 500, "파일 읽어오기 오류"), + FILE_PARSING_ERROR("F002", 500, "파일 파싱중 오류"), + + NOT_AUTHENTICATION_USER("P001", 400, "인증실패"), + NOT_AUTHORIZED_USER("P002", 401, "인가되지 않은 사용자"), + NOT_PERMISSION("P003", 403, "권한이 없는 사용자"), + + + EXTERNAL_API_ERROR("EA500", 500, "외부서버 호출에 실패하였습니다.") + ; + + + + private final String code; + + private final int status; + + private final String message; + + private ExceptionCode(String code, int status, String message) { + this.code = code; + this.status = status; + this.message = message; + } + + public String code() { + return this.code; + } + + public String message() { + return this.message; + } + + public int status(){ + return this.status; + } +} diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/Level.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/Level.java new file mode 100644 index 0000000..3771ded --- /dev/null +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/Level.java @@ -0,0 +1,24 @@ +package kr.co.palnet.kac.app.exception; + +public enum Level { + INFO(0), + WARN(1), + RETRY(2), + DROP(3), + RECYCLE(4), + CRITICAL(5); + + private int code; + + Level(int code) { + setLevel(code); + } + + public int getLevel() { + return code; + } + + public void setLevel(int code) { + this.code = code; + } +} diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/ServerExceptionHandler.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/ServerExceptionHandler.java new file mode 100644 index 0000000..fb5be36 --- /dev/null +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/ServerExceptionHandler.java @@ -0,0 +1,42 @@ +package kr.co.palnet.kac.app.exception; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import kr.co.palnet.kac.app.exception.model.BaseErrorModel; + +@RestControllerAdvice +public class ServerExceptionHandler { + + + @ExceptionHandler(AppException.class) + public ResponseEntity appExceptionHandle(AppException e) { + + ExceptionCode errorType = e.getErrorCode(); + + BaseErrorModel baseBody = new BaseErrorModel(); + baseBody.setCode(errorType.code()); + baseBody.setMessage(errorType.message()); + + e.printStackTrace(); + + return ResponseEntity.status(errorType.status()).body(baseBody); + } + + @ExceptionHandler(Exception.class) + public ResponseEntity exceptionHandle(Exception e) { + + ExceptionCode errorType = ExceptionCode.INTERNAL_SERVER_ERROR; + + BaseErrorModel baseBody = new BaseErrorModel(); + baseBody.setCode(errorType.code()); + baseBody.setMessage(errorType.message()); + + e.printStackTrace(); + + return ResponseEntity.status(errorType.status()).body(baseBody); + } + +} + diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/Source.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/Source.java new file mode 100644 index 0000000..3827cb1 --- /dev/null +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/Source.java @@ -0,0 +1,6 @@ +package kr.co.palnet.kac.app.exception; + +public enum Source { + SERVER, + INTERNAL +} diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/model/BaseErrorModel.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/model/BaseErrorModel.java new file mode 100644 index 0000000..7bcb461 --- /dev/null +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/exception/model/BaseErrorModel.java @@ -0,0 +1,14 @@ +package kr.co.palnet.kac.app.exception.model; + +import lombok.Data; + +@Data +public class BaseErrorModel { + + private String code; + + private String message; + + private String desc; + +}