From 52ebda0a422475219429bea477a25b7d4fe7163e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=96=8C=E5=B3=B0?= Date: Mon, 10 Aug 2026 17:15:16 +0800 Subject: [PATCH] =?UTF-8?q?fix(feign):=20=E4=BF=AE=E5=A4=8DFR=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E7=B1=BB=E5=9E=8B=E6=9C=AA=E5=8F=8D=E5=BA=8F=E5=88=97?= =?UTF-8?q?=E5=8C=96=EF=BC=8C=E4=B8=A2=E5=A4=B1=E9=94=99=E8=AF=AF=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../springblade/core/cloud/feign/BladeFeignFallback.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/blade-core-cloud/src/main/java/org/springblade/core/cloud/feign/BladeFeignFallback.java b/blade-core-cloud/src/main/java/org/springblade/core/cloud/feign/BladeFeignFallback.java index 743bcb1..24e630b 100644 --- a/blade-core-cloud/src/main/java/org/springblade/core/cloud/feign/BladeFeignFallback.java +++ b/blade-core-cloud/src/main/java/org/springblade/core/cloud/feign/BladeFeignFallback.java @@ -25,6 +25,7 @@ */ package org.springblade.core.cloud.feign; +import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.JsonNode; import feign.FeignException; import lombok.AllArgsConstructor; @@ -85,8 +86,8 @@ public class BladeFeignFallback implements MethodInterceptor { return JSON.parseObject(body, returnType); } } - // 暂时不支持 flux,rx,异步等,返回值不是 R,直接返回 null。 - if (R.class != returnType) { + // 暂时不支持 flux,rx,异步等,返回值不是 R(或其子类,如 FR),直接返回 null。 + if (!R.class.isAssignableFrom(returnType)) { return null; } // 非 FeignException @@ -103,7 +104,9 @@ public class BladeFeignFallback implements MethodInterceptor { JsonNode resultNode = JsonUtil.readTree(content); // 判断是否 R 格式 返回体 if (resultNode.has(CODE)) { - return JsonUtil.getInstance().convertValue(resultNode, R.class); + // 支持 R 及其子类(如 FR)的泛型反序列化,保留服务端失败原因 + JavaType javaType = JsonUtil.getInstance().getTypeFactory().constructType(method.getGenericReturnType()); + return JsonUtil.getInstance().convertValue(resultNode, javaType); } return R.fail(resultNode.toString()); }