|
|
@ -1,9 +1,12 @@ |
|
|
|
package com.epmet.commons.tools.feign; |
|
|
|
|
|
|
|
import com.epmet.commons.tools.exception.EpmetErrorCode; |
|
|
|
import com.epmet.commons.tools.exception.EpmetException; |
|
|
|
import com.epmet.commons.tools.exception.RenException; |
|
|
|
import com.epmet.commons.tools.utils.Result; |
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
import org.slf4j.Logger; |
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
|
|
|
|
/** |
|
|
|
* Feign请求结果解析器 |
|
|
@ -12,30 +15,30 @@ public interface ResultDataResolver { |
|
|
|
|
|
|
|
/** |
|
|
|
* @Description 获取Result种的data,如果失败(返回result为null或者result.success为false),那么返回null |
|
|
|
* @return |
|
|
|
* @return data数据 |
|
|
|
* @author wxz |
|
|
|
* @date 2021.06.07 22:45 |
|
|
|
*/ |
|
|
|
//default <R> R tryGetResultData(Result<R> result, String targetServiceName) {
|
|
|
|
// Logger logger = LoggerFactory.getLogger(ResultDataResolver.class);
|
|
|
|
// if (result == null) {
|
|
|
|
// logger.error("调用{}服务发生错误,返回Result为null", targetServiceName);
|
|
|
|
// return null;
|
|
|
|
// }
|
|
|
|
// if (!result.success()) {
|
|
|
|
// logger.error("调用{}服务发生错误,错误信息:{}", targetServiceName, result.getInternalMsg());
|
|
|
|
// return null;
|
|
|
|
// }
|
|
|
|
// return result.getData();
|
|
|
|
//}
|
|
|
|
default <R> R getResultDataOrReturnNull(Result<R> result, String targetServiceName) { |
|
|
|
Logger logger = LoggerFactory.getLogger(ResultDataResolver.class); |
|
|
|
if (result == null) { |
|
|
|
logger.error("调用{}服务发生错误,返回Result为null", targetServiceName); |
|
|
|
return null; |
|
|
|
} |
|
|
|
if (!result.success()) { |
|
|
|
logger.error("调用{}服务发生错误,内部信息:{},错误信息:{}", targetServiceName, result.getInternalMsg(), result.getMsg()); |
|
|
|
return null; |
|
|
|
} |
|
|
|
return result.getData(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @Description |
|
|
|
* @return |
|
|
|
* @Description 解析Result中的结果,如果请求上游服务返回的结果不成功,则抛出异常 |
|
|
|
* @return data数据 |
|
|
|
* @param targetServiceName 目标service名称 |
|
|
|
* @param errorCode 错误码,可以为空,为空则使用上游服务抛出的错误码 |
|
|
|
* @param errorInternalMsg 内部错误信息,可以为空,为空则使用上游服务抛出的异常信息 |
|
|
|
* @param showMsg 展示给前端程序的错误信息,可以为空。为空则根据errorCode给定错误msg信息 |
|
|
|
* @param errorCode 错误码,可以为空,为空则使用8000 |
|
|
|
* @param errorInternalMsg 内部错误信息,可以为空,为空则internalMsg="" |
|
|
|
* @param showMsg 展示给前端程序的错误信息,可以为空。为空则showMsg="" |
|
|
|
* @author wxz |
|
|
|
* @date 2021.06.07 22:45 |
|
|
|
*/ |
|
|
@ -43,11 +46,25 @@ public interface ResultDataResolver { |
|
|
|
if (result == null) { |
|
|
|
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), "调用{}服务发生错误,返回Result为null", targetServiceName); |
|
|
|
} |
|
|
|
if (!result.success()) { |
|
|
|
|
|
|
|
// 考虑到:上游服务抛出的异常代码和错误消息并不一定适用于当前服务,并且上有服务的错误消息弹出之后可能给用户造成困扰,
|
|
|
|
// 因此,当前服务抛出异常的时候,不再继承上游服务返回的错误码和错误消息
|
|
|
|
/*if (!result.success()) { |
|
|
|
Integer finalErrorCode = errorCode == null ? result.getCode() : errorCode; |
|
|
|
String finalErrorInternalMsg = StringUtils.isBlank(errorInternalMsg) ? result.getInternalMsg() : errorInternalMsg; |
|
|
|
throw new RenException(finalErrorCode, finalErrorInternalMsg, showMsg, RenException.MessageMode.CODE_INTERNAL_EXTERNAL); |
|
|
|
}*/ |
|
|
|
|
|
|
|
if (!result.success()) { |
|
|
|
|
|
|
|
// 如果不通过参数指定code,则默认使用8000服务器开小差
|
|
|
|
Integer finalErrorCode = errorCode == null ? EpmetErrorCode.SERVER_ERROR.getCode() : errorCode; |
|
|
|
String finalErrorInternalMsg = StringUtils.isBlank(errorInternalMsg) ? "" : errorInternalMsg; |
|
|
|
String finalShowMsg = StringUtils.isBlank(showMsg) ? "" : showMsg; |
|
|
|
|
|
|
|
throw new EpmetException(finalErrorCode, finalErrorInternalMsg, finalShowMsg); |
|
|
|
} |
|
|
|
|
|
|
|
return result.getData(); |
|
|
|
} |
|
|
|
|
|
|
|