From 27739d458f4cd8ba2905d8e6ce84aef650727cda Mon Sep 17 00:00:00 2001 From: "chen.ma" Date: Wed, 2 Mar 2022 21:19:18 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E6=9C=8D=E5=8A=A1=E7=AB=AF?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E4=BD=93=E7=B3=BB=20#124?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/filter/JWTAuthorizationFilter.java | 3 +- .../cn/hippo4j/common/web/base/Result.java | 17 ++++ .../cn/hippo4j/common/web/base/Results.java | 75 ++++++++++++++--- .../web/exception/AbstractException.java | 21 +++++ .../common/web/exception/ErrorCode.java | 25 ++++++ .../common/web/exception/ErrorCodeEnum.java | 19 ++++- .../web/exception/ServiceException.java | 83 +++++++++++++++---- 7 files changed, 210 insertions(+), 33 deletions(-) create mode 100644 hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/AbstractException.java create mode 100644 hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ErrorCode.java diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthorizationFilter.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthorizationFilter.java index d7e65a87..fc13a1a0 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthorizationFilter.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthorizationFilter.java @@ -23,6 +23,7 @@ import java.io.IOException; import java.util.Collections; import static cn.hippo4j.common.constant.Constants.ACCESS_TOKEN; +import static cn.hippo4j.common.web.exception.ErrorCodeEnum.LOGIN_TIMEOUT; /** * JWT authorization filter. @@ -92,7 +93,7 @@ public class JWTAuthorizationFilter extends BasicAuthenticationFilter { String token = tokenHeader.replace(JwtTokenUtil.TOKEN_PREFIX, ""); boolean expiration = JwtTokenUtil.isExpiration(token); if (expiration) { - throw new ServiceException("登录时间过长,请退出重新登录"); + throw new ServiceException(LOGIN_TIMEOUT); } String username = JwtTokenUtil.getUsername(token); diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/web/base/Result.java b/hippo4j-common/src/main/java/cn/hippo4j/common/web/base/Result.java index e9909d59..5b3383c1 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/web/base/Result.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/web/base/Result.java @@ -17,14 +17,31 @@ public class Result implements Serializable { private static final long serialVersionUID = -4408341719434417427L; + /** + * Correct return code. + */ public static final String SUCCESS_CODE = "0"; + /** + * Return code. + */ private String code; + /** + * Message. + */ private String message; + /** + * Response data. + */ private T data; + /** + * Is success. + * + * @return + */ public boolean isSuccess() { return SUCCESS_CODE.equals(code); } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/web/base/Results.java b/hippo4j-common/src/main/java/cn/hippo4j/common/web/base/Results.java index 2adc23bb..01e05a20 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/web/base/Results.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/web/base/Results.java @@ -1,7 +1,10 @@ package cn.hippo4j.common.web.base; +import cn.hippo4j.common.web.exception.AbstractException; +import cn.hippo4j.common.web.exception.ErrorCode; import cn.hippo4j.common.web.exception.ErrorCodeEnum; -import cn.hippo4j.common.web.exception.ServiceException; + +import java.util.Optional; /** * Results. @@ -11,37 +14,85 @@ import cn.hippo4j.common.web.exception.ServiceException; */ public final class Results { + /** + * 成功. + * + * @return + */ public static Result success() { return new Result() .setCode(Result.SUCCESS_CODE); } + /** + * 成功. + * + * @param data 并设置 DATA 参数 + * @param 对应 DATA 字段的数据类型 + * @return + */ public static Result success(T data) { return new Result() .setCode(Result.SUCCESS_CODE) .setData(data); } - public static Result failure(ServiceException serviceException) { - return new Result().setCode(ErrorCodeEnum.SERVICE_ERROR.getCode()) - .setMessage(serviceException.getMessage()); + /** + * 返回失败信息. + * + * @return + */ + public static Result failure() { + return failure(ErrorCodeEnum.SERVICE_ERROR.getCode(), ErrorCodeEnum.SERVICE_ERROR.getMessage()); + } + + /** + * 框架定义抽象异常拦截. + * + * @param abstractException 框架自定义抽象异常 + * @return + */ + protected static Result failure(AbstractException abstractException) { + String errorCode = Optional.ofNullable(abstractException.getErrorCode()) + .map(ErrorCode::getCode) + .orElse(ErrorCodeEnum.SERVICE_ERROR.getCode()); + + return new Result().setCode(errorCode) + .setMessage(abstractException.getMessage()); } + /** + * 未知异常. + * + * @param throwable 未知异常 + * @return + */ public static Result failure(Throwable throwable) { return new Result().setCode(ErrorCodeEnum.SERVICE_ERROR.getCode()) .setMessage(throwable.getMessage()); } - public static Result failure(String code, String message) { - return new Result() - .setCode(code) - .setMessage(message); + /** + * 返回失败信息. + * + * @param errorCode 错误编码、错误信息 + * @return + */ + public static Result failure(ErrorCode errorCode) { + return failure(errorCode.getCode(), errorCode.getMessage()); } - public static Result failure(ErrorCodeEnum errorCode) { - return new Result() - .setCode(errorCode.getCode()) - .setMessage(errorCode.getMessage()); + /** + * 返回失败信息. + * + * @param code 错误编码. + * @param message 错误信息. + * @return + */ + public static Result failure(String code, String message) { + return new Result() + .setCode(code) + .setMessage(message); } } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/AbstractException.java b/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/AbstractException.java new file mode 100644 index 00000000..fe8cdf35 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/AbstractException.java @@ -0,0 +1,21 @@ +package cn.hippo4j.common.web.exception; + +import lombok.Getter; + +/** + * Abstract exception. + * + * @author chen.ma + * @date 2022/3/2 20:01 + */ +public class AbstractException extends RuntimeException { + + @Getter + public final ErrorCode errorCode; + + public AbstractException(String message, Throwable throwable, ErrorCode errorCode) { + super(message, throwable); + this.errorCode = errorCode; + } + +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ErrorCode.java b/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ErrorCode.java new file mode 100644 index 00000000..aeddd28e --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ErrorCode.java @@ -0,0 +1,25 @@ +package cn.hippo4j.common.web.exception; + +/** + * 错误码抽象接口. + * + * @author chen.ma + * @date 2021/9/16 15:39 + */ +public interface ErrorCode { + + /** + * 错误码. + * + * @return + */ + String getCode(); + + /** + * 错误信息. + * + * @return + */ + String getMessage(); + +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ErrorCodeEnum.java b/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ErrorCodeEnum.java index 9f4dbf60..a14573c2 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ErrorCodeEnum.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ErrorCodeEnum.java @@ -6,7 +6,7 @@ package cn.hippo4j.common.web.exception; * @author chen.ma * @date 2021/3/19 16:07 */ -public enum ErrorCodeEnum { +public enum ErrorCodeEnum implements ErrorCode { /** * UNKNOWN_ERROR @@ -66,10 +66,21 @@ public enum ErrorCodeEnum { public String getMessage() { return "NOT_FOUND"; } - }; + }, - public abstract String getCode(); + /** + * LOGIN_TIMEOUT + */ + LOGIN_TIMEOUT { + @Override + public String getCode() { + return "A000004"; + } - public abstract String getMessage(); + @Override + public String getMessage() { + return "登录时间过长, 请退出重新登录"; + } + } } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ServiceException.java b/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ServiceException.java index 9527812a..c6e77d88 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ServiceException.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ServiceException.java @@ -1,6 +1,5 @@ package cn.hippo4j.common.web.exception; -import lombok.Data; import lombok.EqualsAndHashCode; /** @@ -9,38 +8,90 @@ import lombok.EqualsAndHashCode; * @author chen.ma * @date 2021/3/19 16:14 */ -@Data @EqualsAndHashCode(callSuper = true) -public class ServiceException extends RuntimeException { +public class ServiceException extends AbstractException { - private static final long serialVersionUID = -8667394300356618037L; + /** + * 无指定错误码. + */ + public ServiceException() { + this(ErrorCodeEnum.SERVICE_ERROR); + } - private String detail; + /** + * 指定错误码. + * + * @param errorCode + */ + public ServiceException(ErrorCode errorCode) { + this(errorCode.getMessage(), null, errorCode); + } + /** + * 指定报错信息. + * + * @param message + */ public ServiceException(String message) { - super(message); + this(message, null, ErrorCodeEnum.SERVICE_ERROR); } - public ServiceException(String message, String detail) { - super(message); - this.detail = detail; + /** + * 异常抛出. + * + * @param cause + */ + public ServiceException(Throwable cause) { + this(cause, cause.getMessage()); } + /** + * 异常抛出并指定错误信息. + * + * @param message + * @param cause + */ public ServiceException(String message, Throwable cause) { - super(message, cause); - this.detail = cause.getMessage(); + this(message, cause, ErrorCodeEnum.SERVICE_ERROR); + } + + /** + * 异常抛出并指定错误信息. + * + * @param cause + * @param message + */ + public ServiceException(Throwable cause, String message) { + this(message, cause, ErrorCodeEnum.SERVICE_ERROR); + } + + /** + * 异常抛出并指定错误码. + * + * @param cause + * @param errorCode + */ + public ServiceException(Throwable cause, ErrorCode errorCode) { + this(errorCode.getMessage(), cause, errorCode); } - public ServiceException(String message, String detail, Throwable cause) { - super(message, cause); - this.detail = detail; + /** + * 报错信息与错误码同时存在, 并且不一致. + *

以报错信息为主, 进行打印. + * + * @param message + * @param cause + * @param errorCode + */ + public ServiceException(String message, Throwable cause, ErrorCode errorCode) { + super(message, cause, errorCode); } @Override public String toString() { return "ServiceException{" + - "message='" + getMessage() + "'," + - "detail='" + getDetail() + "'" + + "code='" + errorCode.getCode() + "'," + + "message='" + errorCode.getMessage() + "'" + '}'; }