This commit is contained in:
六如
2024-11-04 00:01:02 +08:00
parent 0e29510d0e
commit f76eab3c30
20 changed files with 617 additions and 420 deletions

View File

@@ -1,10 +1,10 @@
package com.gitee.sop.gateway.exception.impl;
import com.gitee.sop.gateway.request.ApiRequestContext;
import com.gitee.sop.gateway.response.ApiResponse;
import com.gitee.sop.gateway.exception.ApiException;
import com.gitee.sop.gateway.exception.ExceptionExecutor;
import com.gitee.sop.gateway.message.ErrorEnum;
import com.gitee.sop.gateway.request.ApiRequestContext;
import com.gitee.sop.gateway.response.ApiResponse;
import org.apache.dubbo.rpc.service.GenericException;
import org.springframework.stereotype.Service;
@@ -13,6 +13,7 @@ import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author 六如
*/
@@ -20,6 +21,7 @@ import java.util.regex.Pattern;
public class ExceptionExecutorImpl implements ExceptionExecutor {
private static final String CONSTRAINT_VIOLATION_EXCEPTION = "ConstraintViolationException";
private static final String OPEN_EXCEPTION = "OpenException";
@Override
public ApiResponse executeException(ApiRequestContext apiRequestContext, Exception e) {
@@ -32,6 +34,18 @@ public class ExceptionExecutorImpl implements ExceptionExecutor {
Set<String> msgs = findErrorMsg(exceptionMessage);
return ApiResponse.error(ErrorEnum.ISV_ERROR_PARAMETER, apiRequestContext.getLocale(), String.join(",", msgs));
}
if (exceptionClass.contains(OPEN_EXCEPTION)) {
String exceptionMessage = genericException.getExceptionMessage();
String errorMsg = exceptionMessage.split("\n")[1];
// isv.common-error@@系统错误@@
String[] msgAr = errorMsg.split("@@");
return ApiResponse.error(
ErrorEnum.BIZ_ERROR,
apiRequestContext.getLocale(),
msgAr[0],
msgAr[1]
);
}
} else if (e instanceof ApiException) {
return ApiResponse.error(((ApiException) e));
}

View File

@@ -89,6 +89,17 @@ public class ApiResponse extends BaseResponse {
return error(error, subMsg);
}
public static ApiResponse error(ErrorEnum errorEnum, Locale locale, String subCode, String subMsg) {
ErrorMeta errorMeta = errorEnum.getErrorMeta();
IError error = errorMeta.getError(locale);
ApiResponse apiResponse = new ApiResponse();
apiResponse.setCode(error.getCode());
apiResponse.setMsg(error.getMsg());
apiResponse.setSubCode(subCode);
apiResponse.setSubMsg(subMsg);
return apiResponse;
}
public static ApiResponse error(ErrorEnum errorEnum, Locale locale) {
ErrorMeta errorMeta = errorEnum.getErrorMeta();
IError error = errorMeta.getError(locale);
@@ -108,4 +119,13 @@ public class ApiResponse extends BaseResponse {
return apiResponse;
}
public Response toLower() {
ApiResponseLower apiResponseLower = new ApiResponseLower();
apiResponseLower.setSub_code(this.subCode);
apiResponseLower.setSub_msg(this.subMsg);
apiResponseLower.setCode(this.subCode);
apiResponseLower.setMsg(this.subMsg);
apiResponseLower.setData(this.getData());
return apiResponseLower;
}
}

View File

@@ -2,6 +2,7 @@ package com.gitee.sop.gateway.service;
import com.gitee.sop.gateway.common.ApiInfoDTO;
import com.gitee.sop.gateway.request.ApiRequestContext;
import com.gitee.sop.gateway.response.ApiResponse;
import com.gitee.sop.gateway.response.Response;
/**
@@ -13,4 +14,8 @@ public interface ResultWrapper {
Response wrap(ApiRequestContext context, ApiInfoDTO apiInfoDTO, Object result);
default Response wrap(ApiRequestContext context, ApiResponse apiResponse) {
return wrap(context, null, apiResponse);
}
}

View File

@@ -24,9 +24,16 @@ public class ResultWrapperImpl implements ResultWrapper {
@Override
public Response wrap(ApiRequestContext context, ApiInfoDTO apiInfoDTO, Object result) {
Integer hasCommonResponse = apiInfoDTO.getHasCommonResponse();
Integer hasCommonResponse = apiInfoDTO == null ?
YesOrNoEnum.YES.getValue()
: apiInfoDTO.getHasCommonResponse();
boolean needNotWrap = YesOrNoEnum.of(hasCommonResponse) == YesOrNoEnum.NO;
if (result instanceof ApiResponse) {
ApiResponse apiResponse = (ApiResponse) result;
return executeApiResponse(apiResponse, needNotWrap);
}
// 不需要公共返回参数
if (YesOrNoEnum.of(hasCommonResponse) == YesOrNoEnum.NO) {
if (needNotWrap) {
return NoCommonResponse.success(result);
}
if (Objects.equals(apiConfig.getFieldLowercase(), true)) {
@@ -36,4 +43,16 @@ public class ResultWrapperImpl implements ResultWrapper {
}
}
private Response executeApiResponse(ApiResponse apiResponse, boolean needNotWrap) {
// 不需要公共返回参数
if (needNotWrap) {
return NoCommonResponse.success(apiResponse.getData());
}
if (Objects.equals(apiConfig.getFieldLowercase(), true)) {
return apiResponse.toLower();
} else {
return apiResponse;
}
}
}

View File

@@ -11,6 +11,7 @@ import com.gitee.sop.gateway.message.ErrorEnum;
import com.gitee.sop.gateway.request.ApiRequest;
import com.gitee.sop.gateway.request.ApiRequestContext;
import com.gitee.sop.gateway.request.UploadContext;
import com.gitee.sop.gateway.response.ApiResponse;
import com.gitee.sop.gateway.response.Response;
import com.gitee.sop.gateway.service.interceptor.RouteInterceptor;
import com.gitee.sop.gateway.service.validate.Validator;
@@ -72,7 +73,8 @@ public class RouteServiceImpl implements RouteService {
return resultWrapper.wrap(apiRequestContext, apiInfoDTO, result);
} catch (Exception e) {
log.error("接口请求报错, , ip={}, apiRequest={}", apiRequestContext.getIp(), apiRequest, e);
return exceptionExecutor.executeException(apiRequestContext, e);
ApiResponse apiResponse = exceptionExecutor.executeException(apiRequestContext, e);
return resultWrapper.wrap(apiRequestContext, apiResponse);
}
}