Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2bf9de5450 |
+10
-1
@@ -106,7 +106,16 @@ public class BladeFeignFallback<T> implements MethodInterceptor {
|
|||||||
if (resultNode.has(CODE)) {
|
if (resultNode.has(CODE)) {
|
||||||
// 支持 R 及其子类(如 FR)的泛型反序列化,保留服务端失败原因
|
// 支持 R 及其子类(如 FR)的泛型反序列化,保留服务端失败原因
|
||||||
JavaType javaType = JsonUtil.getInstance().getTypeFactory().constructType(method.getGenericReturnType());
|
JavaType javaType = JsonUtil.getInstance().getTypeFactory().constructType(method.getGenericReturnType());
|
||||||
return JsonUtil.getInstance().convertValue(resultNode, javaType);
|
try {
|
||||||
|
return JsonUtil.getInstance().convertValue(resultNode, javaType);
|
||||||
|
} catch (Exception convertException) {
|
||||||
|
// 服务端 data 被写成 {}(null 空值序列化)而客户端泛型是 Boolean 这类标量时无法反序列化。
|
||||||
|
// 此处抛出会被 BladeSentinelInvocationHandler 包成 AssertionError(Error 而非 Exception),
|
||||||
|
// 击穿调用方的 catch (Exception),把可恢复的 4xx 升级成 500,故一律降级为失败结果。
|
||||||
|
log.warn("BladeFeignFallback:[{}.{}] 响应体无法按 {} 反序列化,降级为失败结果:{}",
|
||||||
|
targetType.getName(), method.getName(), method.getGenericReturnType(), convertException.getMessage());
|
||||||
|
return R.fail(resultNode.path(CODE).asInt(ResultCode.FAILURE.getCode()), resultNode.path("msg").asText(errorMessage));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return R.fail(resultNode.toString());
|
return R.fail(resultNode.toString());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user