From 27cde384a0f03c3d264e8fc12d12885a017ccd63 Mon Sep 17 00:00:00 2001 From: xiang Date: Sun, 24 Aug 2025 16:11:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=85=A8=E5=B1=80=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E6=8D=95=E8=8E=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xservice/basic/common/resp/Result.java | 8 ++- .../xservice/basic/enums/DelStatusEnum.java | 17 +++++ .../basic/exception/BusinessException.java | 26 ++++++++ .../exception/GlobalExceptionHandler.java | 63 +++++++++++++++++++ .../basic/exception/code/BaseErrorCode.java | 7 +++ .../basic/exception/code/ErrorCode.java | 17 +++++ 6 files changed, 136 insertions(+), 2 deletions(-) create mode 100644 xservice-common/src/main/java/com/xiang/xservice/basic/enums/DelStatusEnum.java create mode 100644 xservice-common/src/main/java/com/xiang/xservice/basic/exception/BusinessException.java create mode 100644 xservice-common/src/main/java/com/xiang/xservice/basic/exception/GlobalExceptionHandler.java create mode 100644 xservice-common/src/main/java/com/xiang/xservice/basic/exception/code/BaseErrorCode.java create mode 100644 xservice-common/src/main/java/com/xiang/xservice/basic/exception/code/ErrorCode.java diff --git a/xservice-common/src/main/java/com/xiang/xservice/basic/common/resp/Result.java b/xservice-common/src/main/java/com/xiang/xservice/basic/common/resp/Result.java index cae411a..e11a75d 100644 --- a/xservice-common/src/main/java/com/xiang/xservice/basic/common/resp/Result.java +++ b/xservice-common/src/main/java/com/xiang/xservice/basic/common/resp/Result.java @@ -26,8 +26,12 @@ public class Result { public static Result success(String message) { return new Result("200", message, null); } - - + public static Result success(T data) { + return new Result("200", "success", Collections.singletonList(data)); + } + public static Result success(List data) { + return new Result("200", "success", data); + } public static Result success(String message, List data) { return new Result("200", message, data); } diff --git a/xservice-common/src/main/java/com/xiang/xservice/basic/enums/DelStatusEnum.java b/xservice-common/src/main/java/com/xiang/xservice/basic/enums/DelStatusEnum.java new file mode 100644 index 0000000..c5750e5 --- /dev/null +++ b/xservice-common/src/main/java/com/xiang/xservice/basic/enums/DelStatusEnum.java @@ -0,0 +1,17 @@ +package com.xiang.xservice.basic.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum DelStatusEnum { + + NOT_DELETED(0, "未删除"), + DELETED(1, "已删除"), + ; + + private final Integer code; + private final String msg; + +} diff --git a/xservice-common/src/main/java/com/xiang/xservice/basic/exception/BusinessException.java b/xservice-common/src/main/java/com/xiang/xservice/basic/exception/BusinessException.java new file mode 100644 index 0000000..63cc0eb --- /dev/null +++ b/xservice-common/src/main/java/com/xiang/xservice/basic/exception/BusinessException.java @@ -0,0 +1,26 @@ +package com.xiang.xservice.basic.exception; + +import com.xiang.xservice.basic.exception.code.BaseErrorCode; +import com.xiang.xservice.basic.exception.code.ErrorCode; +import lombok.Getter; + +@Getter +public class BusinessException extends RuntimeException { + + private final String code; + + public BusinessException(String code, String message) { + super(message); + this.code = code; + } + + public BusinessException(String message) { + super(message); + this.code = ErrorCode.ERROR.getCode(); + } + + public BusinessException(BaseErrorCode errorCode) { + super(errorCode.getMessage()); + this.code = errorCode.getCode(); + } +} diff --git a/xservice-common/src/main/java/com/xiang/xservice/basic/exception/GlobalExceptionHandler.java b/xservice-common/src/main/java/com/xiang/xservice/basic/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000..7291700 --- /dev/null +++ b/xservice-common/src/main/java/com/xiang/xservice/basic/exception/GlobalExceptionHandler.java @@ -0,0 +1,63 @@ +package com.xiang.xservice.basic.exception; + +import com.xiang.xservice.basic.common.resp.Result ; +import com.xiang.xservice.basic.exception.code.ErrorCode; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.validation.BindException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +@Slf4j +@RestControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常 + */ + @ExceptionHandler(BusinessException.class) + public Result handleBusinessException(BusinessException e) { + log.warn("业务异常: {}", e.getMessage()); + return Result.error(e.getCode(), e.getMessage()); + } + + /** + * 参数校验异常 - @Valid / @Validated + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + public Result handleValidException(MethodArgumentNotValidException e) { + String msg = e.getBindingResult().getFieldError() != null ? + e.getBindingResult().getFieldError().getDefaultMessage() : "参数错误"; + log.warn("参数校验异常: {}", msg); + return Result.error(ErrorCode.PARAM_ERROR.getCode(), msg); + } + + /** + * 参数绑定异常 - GET 请求参数校验失败 + */ + @ExceptionHandler(BindException.class) + public Result handleBindException(BindException e) { + String msg = e.getFieldError() != null ? e.getFieldError().getDefaultMessage() : "参数错误"; + log.warn("参数绑定异常: {}", msg); + return Result.error(ErrorCode.PARAM_ERROR.getCode(), msg); + } + + /** + * JSON 解析异常 + */ + @ExceptionHandler(HttpMessageNotReadableException.class) + public Result handleHttpMessageNotReadable(HttpMessageNotReadableException e) { + log.warn("JSON解析异常: {}", e.getMessage()); + return Result.error(ErrorCode.JSON_ERROR.getCode(), ErrorCode.JSON_ERROR.getMessage()); + } + + /** + * 系统异常 + */ + @ExceptionHandler(Exception.class) + public Result handleException(Exception e) { + log.error("系统异常: ", e); + return Result.error(ErrorCode.ERROR.getCode(), ErrorCode.ERROR.getMessage()); + } +} diff --git a/xservice-common/src/main/java/com/xiang/xservice/basic/exception/code/BaseErrorCode.java b/xservice-common/src/main/java/com/xiang/xservice/basic/exception/code/BaseErrorCode.java new file mode 100644 index 0000000..cd5d996 --- /dev/null +++ b/xservice-common/src/main/java/com/xiang/xservice/basic/exception/code/BaseErrorCode.java @@ -0,0 +1,7 @@ +package com.xiang.xservice.basic.exception.code; + + +public interface BaseErrorCode { + String getCode(); + String getMessage(); +} diff --git a/xservice-common/src/main/java/com/xiang/xservice/basic/exception/code/ErrorCode.java b/xservice-common/src/main/java/com/xiang/xservice/basic/exception/code/ErrorCode.java new file mode 100644 index 0000000..0e6e07f --- /dev/null +++ b/xservice-common/src/main/java/com/xiang/xservice/basic/exception/code/ErrorCode.java @@ -0,0 +1,17 @@ +package com.xiang.xservice.basic.exception.code; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum ErrorCode implements BaseErrorCode { + + ERROR("-1", "系统繁忙,请稍后再试!"), + PARAM_ERROR("-2", "请求参数异常!"), + JSON_ERROR("-3", "JSON异常!"), + ; + + private final String code; + private final String message; +}