From 3894ada549fca594765c1e2f21a4a90bdea70316 Mon Sep 17 00:00:00 2001 From: haerong22 Date: Sun, 29 Jan 2023 02:07:10 +0900 Subject: [PATCH] #32 multi module: handle exception --- .../moduleapi/controller/DemoController.java | 5 +++ .../moduleapi/exception/CustomException.java | 16 +++++++++ .../exception/GlobalExceptionHandler.java | 27 +++++++++++++++ .../moduleapi/response/CommonResponse.java | 33 +++++++++++++++++++ .../moduleapi/service/DemoService.java | 5 +++ 5 files changed, 86 insertions(+) create mode 100644 multimodule/module-api/src/main/java/com/example/moduleapi/exception/CustomException.java create mode 100644 multimodule/module-api/src/main/java/com/example/moduleapi/exception/GlobalExceptionHandler.java create mode 100644 multimodule/module-api/src/main/java/com/example/moduleapi/response/CommonResponse.java diff --git a/multimodule/module-api/src/main/java/com/example/moduleapi/controller/DemoController.java b/multimodule/module-api/src/main/java/com/example/moduleapi/controller/DemoController.java index f8cd7210..bdba4008 100644 --- a/multimodule/module-api/src/main/java/com/example/moduleapi/controller/DemoController.java +++ b/multimodule/module-api/src/main/java/com/example/moduleapi/controller/DemoController.java @@ -20,4 +20,9 @@ public class DemoController { public String find() { return demoService.find(); } + + @GetMapping("/exception") + public String exception() { + return demoService.exception(); + } } diff --git a/multimodule/module-api/src/main/java/com/example/moduleapi/exception/CustomException.java b/multimodule/module-api/src/main/java/com/example/moduleapi/exception/CustomException.java new file mode 100644 index 00000000..0631dda9 --- /dev/null +++ b/multimodule/module-api/src/main/java/com/example/moduleapi/exception/CustomException.java @@ -0,0 +1,16 @@ +package com.example.moduleapi.exception; + +import com.example.modulecommon.enums.CodeEnum; +import lombok.Getter; + +@Getter +public class CustomException extends RuntimeException { + private final String returnCode; + private final String returnMessage; + + public CustomException(CodeEnum codeEnum) { + super(codeEnum.getMessage()); + this.returnCode = codeEnum.getCode(); + this.returnMessage = codeEnum.getMessage(); + } +} diff --git a/multimodule/module-api/src/main/java/com/example/moduleapi/exception/GlobalExceptionHandler.java b/multimodule/module-api/src/main/java/com/example/moduleapi/exception/GlobalExceptionHandler.java new file mode 100644 index 00000000..c377ed75 --- /dev/null +++ b/multimodule/module-api/src/main/java/com/example/moduleapi/exception/GlobalExceptionHandler.java @@ -0,0 +1,27 @@ +package com.example.moduleapi.exception; + +import com.example.moduleapi.response.CommonResponse; +import com.example.modulecommon.enums.CodeEnum; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +@RestControllerAdvice +public class GlobalExceptionHandler { + + @ExceptionHandler(CustomException.class) + public CommonResponse handleCustomException(CustomException e) { + + return CommonResponse.builder() + .returnCode(e.getReturnCode()) + .returnMessage(e.getReturnMessage()) + .build(); + } + + @ExceptionHandler(Exception.class) + public CommonResponse handleException(Exception e) { + return CommonResponse.builder() + .returnCode(CodeEnum.UNKNOWN_ERROR.getCode()) + .returnMessage(CodeEnum.UNKNOWN_ERROR.getMessage()) + .build(); + } +} diff --git a/multimodule/module-api/src/main/java/com/example/moduleapi/response/CommonResponse.java b/multimodule/module-api/src/main/java/com/example/moduleapi/response/CommonResponse.java new file mode 100644 index 00000000..e503e311 --- /dev/null +++ b/multimodule/module-api/src/main/java/com/example/moduleapi/response/CommonResponse.java @@ -0,0 +1,33 @@ +package com.example.moduleapi.response; + +import com.example.modulecommon.enums.CodeEnum; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +@JsonInclude(JsonInclude.Include.NON_NULL) +public class CommonResponse { + + private String returnCode; + private String returnMessage; + private T info; + + public CommonResponse(CodeEnum codeEnum) { + this.returnCode = codeEnum.getCode(); + this.returnMessage = codeEnum.getMessage(); + } + + public CommonResponse(T info) { + this.returnCode = CodeEnum.SUCCESS.getCode(); + this.returnMessage = CodeEnum.SUCCESS.getMessage(); + this.info = info; + } + + public CommonResponse(CodeEnum codeEnum, T info) { + this.returnCode = codeEnum.getCode(); + this.returnMessage = codeEnum.getMessage(); + this.info = info; + } +} diff --git a/multimodule/module-api/src/main/java/com/example/moduleapi/service/DemoService.java b/multimodule/module-api/src/main/java/com/example/moduleapi/service/DemoService.java index b2545ea9..b2a90a28 100644 --- a/multimodule/module-api/src/main/java/com/example/moduleapi/service/DemoService.java +++ b/multimodule/module-api/src/main/java/com/example/moduleapi/service/DemoService.java @@ -1,5 +1,6 @@ package com.example.moduleapi.service; +import com.example.moduleapi.exception.CustomException; import com.example.modulecommon.enums.CodeEnum; import com.example.modulecommon.sevice.CommonDemoService; import lombok.RequiredArgsConstructor; @@ -20,4 +21,8 @@ public class DemoService { public String find() { return "find"; } + + public String exception() { + throw new CustomException(CodeEnum.UNKNOWN_ERROR); + } }