From 1f27d5f3e3c14f32c1b25537edc01d5df2d8ad04 Mon Sep 17 00:00:00 2001 From: Redkale <8730487+redkale@users.noreply.github.com> Date: Thu, 6 Aug 2020 16:06:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84Rest=E7=9A=84=E6=B3=9B?= =?UTF-8?q?=E5=9E=8B=E8=AF=86=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/org/redkale/net/http/Rest.java | 3 ++- src/org/redkale/util/TypeToken.java | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/org/redkale/net/http/Rest.java b/src/org/redkale/net/http/Rest.java index 690a303f3..e6267817c 100644 --- a/src/org/redkale/net/http/Rest.java +++ b/src/org/redkale/net/http/Rest.java @@ -1158,7 +1158,8 @@ public final class Rest { } } while ((loop = loop.getSuperclass()) != Object.class); } - paramlist.add(new Object[]{param, n, ptype, radix, comment, required, annpara, annsid, annaddr, annhead, anncookie, annbody, annfile, annuri, userid, annheaders, param.getParameterizedType()}); + java.lang.reflect.Type paramtype = TypeToken.getGenericType( param.getParameterizedType(),serviceType); + paramlist.add(new Object[]{param, n, ptype, radix, comment, required, annpara, annsid, annaddr, annhead, anncookie, annbody, annfile, annuri, userid, annheaders, paramtype}); } Map mappingMap = new LinkedHashMap<>(); diff --git a/src/org/redkale/util/TypeToken.java b/src/org/redkale/util/TypeToken.java index 79c87fe9e..f07415e47 100644 --- a/src/org/redkale/util/TypeToken.java +++ b/src/org/redkale/util/TypeToken.java @@ -151,6 +151,7 @@ public abstract class TypeToken { ss = ss.getSuperclass(); asts = ss.getTypeParameters(); } + if (atas.length == asts.length) { for (int i = 0; i < asts.length; i++) { Type currt = asts[i]; @@ -185,6 +186,14 @@ public abstract class TypeToken { && ((TypeVariable) type).getBounds()[0] instanceof Class && ((Class) ((TypeVariable) type).getBounds()[0]).isAssignableFrom((Class) atas[i])) return atas[i]; + if (atas[i] instanceof Class + && ((TypeVariable) type).getBounds().length == 1 + && ((TypeVariable) type).getBounds()[0] instanceof ParameterizedType) { + ParameterizedType pt = (ParameterizedType) ((TypeVariable) type).getBounds()[0]; + if (pt.getRawType() instanceof Class && ((Class) pt.getRawType()).isAssignableFrom((Class) atas[i])) { + return atas[i]; + } + } if (atas[i] instanceof ParameterizedType && ((TypeVariable) type).getBounds().length == 1 && ((TypeVariable) type).getBounds()[0] == Object.class)