Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2bf9de5450 |
+10
-1
@@ -106,7 +106,16 @@ public class BladeFeignFallback<T> implements MethodInterceptor {
|
||||
if (resultNode.has(CODE)) {
|
||||
// 支持 R 及其子类(如 FR)的泛型反序列化,保留服务端失败原因
|
||||
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());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user