From a716619910b47f4c4281e29b243ff66ff5719dc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=9E=E7=BF=94=E7=9A=84=E4=BA=94=E8=8A=B1=E8=82=89?= <492300924@qq.com> Date: Mon, 21 Jul 2025 00:57:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=85=A8=E5=B1=80=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- weblog-module-common/pom.xml | 4 ++ .../weblog/common/enums/ResponseCodeEnum.java | 26 ++++++++++ .../exception/BaseExceptionInterface.java | 11 +++++ .../weblog/common/exception/BizException.java | 28 +++++++++++ .../exception/GlobalExceptionHandler.java | 47 +++++++++++++++++++ .../weblog/common/utils/Response.java | 18 +++++++ .../weblog/web/controller/TestController.java | 29 ++++++++++++ 7 files changed, 163 insertions(+) create mode 100644 weblog-module-common/src/main/java/com/qianyong/weblog/common/enums/ResponseCodeEnum.java create mode 100644 weblog-module-common/src/main/java/com/qianyong/weblog/common/exception/BaseExceptionInterface.java create mode 100644 weblog-module-common/src/main/java/com/qianyong/weblog/common/exception/BizException.java create mode 100644 weblog-module-common/src/main/java/com/qianyong/weblog/common/exception/GlobalExceptionHandler.java diff --git a/weblog-module-common/pom.xml b/weblog-module-common/pom.xml index 926bebb..3159d75 100644 --- a/weblog-module-common/pom.xml +++ b/weblog-module-common/pom.xml @@ -48,6 +48,10 @@ com.fasterxml.jackson.core jackson-core + + org.springframework.boot + spring-boot-starter-web + diff --git a/weblog-module-common/src/main/java/com/qianyong/weblog/common/enums/ResponseCodeEnum.java b/weblog-module-common/src/main/java/com/qianyong/weblog/common/enums/ResponseCodeEnum.java new file mode 100644 index 0000000..c115722 --- /dev/null +++ b/weblog-module-common/src/main/java/com/qianyong/weblog/common/enums/ResponseCodeEnum.java @@ -0,0 +1,26 @@ +package com.qianyong.weblog.common.enums; + +import com.qianyong.weblog.common.exception.BaseExceptionInterface; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author: xiaoduoduo + * @date: 2023-08-15 10:33 + * @description: 响应异常码 + **/ +@Getter +@AllArgsConstructor +public enum ResponseCodeEnum implements BaseExceptionInterface { + // ----------- 通用异常状态码 ----------- + SYSTEM_ERROR("10000", "出错啦,后台小哥正在努力修复中..."), + + // ----------- 业务异常状态码 ----------- + PRODUCT_NOT_FOUND("20000", "该产品不存在(测试使用)"), + ; + + // 异常码 + private String errorCode; + // 错误信息 + private String errorMessage; +} diff --git a/weblog-module-common/src/main/java/com/qianyong/weblog/common/exception/BaseExceptionInterface.java b/weblog-module-common/src/main/java/com/qianyong/weblog/common/exception/BaseExceptionInterface.java new file mode 100644 index 0000000..621f6df --- /dev/null +++ b/weblog-module-common/src/main/java/com/qianyong/weblog/common/exception/BaseExceptionInterface.java @@ -0,0 +1,11 @@ +package com.qianyong.weblog.common.exception; +/** + * @author: xiaoduoduo + * @date: 2023-08-15 9:54 + * @description: 通用异常接口 + **/ +public interface BaseExceptionInterface { + String getErrorCode(); + + String getErrorMessage(); +} diff --git a/weblog-module-common/src/main/java/com/qianyong/weblog/common/exception/BizException.java b/weblog-module-common/src/main/java/com/qianyong/weblog/common/exception/BizException.java new file mode 100644 index 0000000..cbdaa25 --- /dev/null +++ b/weblog-module-common/src/main/java/com/qianyong/weblog/common/exception/BizException.java @@ -0,0 +1,28 @@ +package com.qianyong.weblog.common.exception; + +import lombok.Getter; +import lombok.Setter; + +/** + * Created with IntelliJ IDEA. + * + * @author :xiaoduoduo + * @date :2025/07/20 + * @description:业务异常 + * @version:1.0 + */ +@Getter +@Setter +public class BizException extends RuntimeException{ + + private static final long serialVersionUID = 1L; + // 异常码 + private String errorCode; + // 错误信息 + private String errorMessage; + + public BizException(BaseExceptionInterface baseExceptionInterface) { + this.errorCode = baseExceptionInterface.getErrorCode(); + this.errorMessage = baseExceptionInterface.getErrorMessage(); + } +} diff --git a/weblog-module-common/src/main/java/com/qianyong/weblog/common/exception/GlobalExceptionHandler.java b/weblog-module-common/src/main/java/com/qianyong/weblog/common/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000..24a1a9d --- /dev/null +++ b/weblog-module-common/src/main/java/com/qianyong/weblog/common/exception/GlobalExceptionHandler.java @@ -0,0 +1,47 @@ +package com.qianyong.weblog.common.exception; + +import com.qianyong.weblog.common.enums.ResponseCodeEnum; +import com.qianyong.weblog.common.utils.Response; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; + +/** + * Created with IntelliJ IDEA. + * + * @author :xiaoduoduo + * @date :2025/07/21 + * @description: 全局异常处理类 + * @version:1.0 + */ +@Slf4j +@ControllerAdvice +public class GlobalExceptionHandler { + /** + * 捕获自定义业务异常 + * @return + */ + @ExceptionHandler({ BizException.class }) + @ResponseBody + public Response handleBizException(HttpServletRequest request, BizException e) { + log.warn("{} request fail, errorCode: {}, errorMessage: {}", request.getRequestURI(), e.getErrorCode(), e.getErrorMessage()); + return Response.fail(e); + } + + /** + * 其他类型异常 + * @param request + * @param e + * @return + */ + @ExceptionHandler({ Exception.class }) + @ResponseBody + public Response handleOtherException(HttpServletRequest request, Exception e) { + log.error("{} request error, ", request.getRequestURI(), e); + return Response.fail(ResponseCodeEnum.SYSTEM_ERROR); + } +} diff --git a/weblog-module-common/src/main/java/com/qianyong/weblog/common/utils/Response.java b/weblog-module-common/src/main/java/com/qianyong/weblog/common/utils/Response.java index 59a9ab3..ff1816f 100644 --- a/weblog-module-common/src/main/java/com/qianyong/weblog/common/utils/Response.java +++ b/weblog-module-common/src/main/java/com/qianyong/weblog/common/utils/Response.java @@ -1,5 +1,7 @@ package com.qianyong.weblog.common.utils; +import com.qianyong.weblog.common.exception.BaseExceptionInterface; +import com.qianyong.weblog.common.exception.BizException; import lombok.Data; import java.io.Serializable; @@ -55,4 +57,20 @@ public class Response implements Serializable { return response; } + public static Response fail(BizException bizException) { + Response response = new Response<>(); + response.setSuccess(false); + response.setErrorCode(bizException.getErrorCode()); + response.setMessage(bizException.getErrorMessage()); + return response; + } + public static Response fail(BaseExceptionInterface baseExceptionInterface) { + Response response = new Response<>(); + response.setSuccess(false); + response.setErrorCode(baseExceptionInterface.getErrorCode()); + response.setMessage(baseExceptionInterface.getErrorMessage()); + return response; + } + + } diff --git a/weblog-web/src/main/java/com/qianyong/weblog/web/controller/TestController.java b/weblog-web/src/main/java/com/qianyong/weblog/web/controller/TestController.java index 82fdde0..9cd4394 100644 --- a/weblog-web/src/main/java/com/qianyong/weblog/web/controller/TestController.java +++ b/weblog-web/src/main/java/com/qianyong/weblog/web/controller/TestController.java @@ -1,6 +1,8 @@ package com.qianyong.weblog.web.controller; import com.qianyong.weblog.common.aspect.ApiOperationLog; +import com.qianyong.weblog.common.enums.ResponseCodeEnum; +import com.qianyong.weblog.common.exception.BizException; import com.qianyong.weblog.common.utils.Response; import com.qianyong.weblog.web.model.User; import lombok.extern.slf4j.Slf4j; @@ -67,4 +69,31 @@ public class TestController { // 返参 return Response.success(); } + + /** + * BizException测试接口 + * @param user + * @param bindingResult + * @return + */ + @PostMapping("/test3") + @ApiOperationLog(description = "BizException测试接口") + public Response test3(@RequestBody @Validated User user, BindingResult bindingResult) { + // 手动抛异常,入参是前面定义好的异常码枚举,返参统一交给全局异常处理器搞定 + throw new BizException(ResponseCodeEnum.PRODUCT_NOT_FOUND); + } + + /** + * 手动抛异常,入参是前面定义好的异常码枚举,返参统一交给全局异常处理器搞定 + * @param user + * @param bindingResult + * @return + */ + @PostMapping("/test4") + @ApiOperationLog(description = "测试接口") + public Response test4(@RequestBody @Validated User user, BindingResult bindingResult) { + // 主动定义一个运行时异常,分母不能为零 + int i = 1 / 0; + return Response.success(); + } } -- Gitee