diff --git a/src/main/java/com/iflytop/gd/system/common/exception/AppException.java b/src/main/java/com/iflytop/gd/system/common/exception/AppException.java new file mode 100644 index 0000000..28e634e --- /dev/null +++ b/src/main/java/com/iflytop/gd/system/common/exception/AppException.java @@ -0,0 +1,21 @@ +package com.iflytop.gd.system.common.exception; + +import com.iflytop.gd.system.common.result.IResultCode; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class AppException extends RuntimeException { + private final IResultCode resultCode; + + public AppException(IResultCode resultCode) { + super(resultCode.getMsg()); + this.resultCode = resultCode; + } + + @Override + public String toString() { + return "AppException{" + "code='" + resultCode.getCode() + ", msg=" + resultCode.getMsg() + '}'; + } +} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/system/common/result/Result.java b/src/main/java/com/iflytop/gd/system/common/result/Result.java index c42ae63..b44497d 100644 --- a/src/main/java/com/iflytop/gd/system/common/result/Result.java +++ b/src/main/java/com/iflytop/gd/system/common/result/Result.java @@ -53,6 +53,10 @@ public class Result implements Serializable { return result(resultCode.getCode(), StrUtil.isNotBlank(msg) ? msg : resultCode.getMsg(), null); } + public static Result failed(String code, String msg) { + return result(code, msg, null); + } + private static Result result(IResultCode resultCode, T data) { return result(resultCode.getCode(), resultCode.getMsg(), data); } diff --git a/src/main/java/com/iflytop/gd/system/handler/GlobalExceptionHandler.java b/src/main/java/com/iflytop/gd/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..0a6ae18 --- /dev/null +++ b/src/main/java/com/iflytop/gd/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,24 @@ +package com.iflytop.gd.system.handler; + +import com.iflytop.gd.system.common.exception.AppException; +import com.iflytop.gd.system.common.result.Result; +import com.iflytop.gd.system.common.result.ResultCode; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +@Slf4j +@RestControllerAdvice +public class GlobalExceptionHandler { + + @ExceptionHandler(Exception.class) + public Result handleException(Exception ex) { + if (ex instanceof AppException ae) { + log.warn("AppException:", ae); + return Result.failed(ae.getResultCode()); + } + log.error("Unhandled exception:", ex); + return Result.failed(ResultCode.SYSTEM_ERROR); + } + +} \ No newline at end of file