From b49a4d2c83df779e73ce9c93ebdbf18797d38685 Mon Sep 17 00:00:00 2001
From: Redkale <22250530@qq.com>
Date: Mon, 5 Sep 2016 15:07:57 +0800
Subject: [PATCH]
---
src/org/redkale/net/http/HttpBaseServlet.java | 43 ++++++-
src/org/redkale/net/http/Rest.java | 118 +++++++++++-------
2 files changed, 112 insertions(+), 49 deletions(-)
diff --git a/src/org/redkale/net/http/HttpBaseServlet.java b/src/org/redkale/net/http/HttpBaseServlet.java
index 53783f80b..aae0ee2cd 100644
--- a/src/org/redkale/net/http/HttpBaseServlet.java
+++ b/src/org/redkale/net/http/HttpBaseServlet.java
@@ -12,7 +12,7 @@ import java.io.IOException;
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.reflect.Method;
+import java.lang.reflect.*;
import java.nio.*;
import java.util.*;
import java.util.concurrent.*;
@@ -51,6 +51,45 @@ public abstract class HttpBaseServlet extends HttpServlet {
}
+ /**
+ * 配合 @WebParam 使用。
+ * 用于对@WebParam中参数的来源类型
+ *
+ *
+ * 详情见: http://redkale.org
+ *
+ * @author zhangjx
+ */
+ protected enum ParamSourceType {
+
+ PARAMETER, HEADER, COOKIE;
+ }
+
+ /**
+ * 配合 @WebAction 使用。
+ * 用于对@WebAction方法中参数描述
+ *
+ *
+ * 详情见: http://redkale.org
+ *
+ * @author zhangjx
+ */
+ @Target({ElementType.ANNOTATION_TYPE, ElementType.PARAMETER})
+ @Retention(RetentionPolicy.RUNTIME)
+ @Documented
+ protected @interface WebParam {
+
+ String value(); //参数名
+
+ Class type(); //参数的数据类型
+
+ String comment() default ""; //备注描述
+
+ ParamSourceType src() default ParamSourceType.PARAMETER; //参数来源类型
+
+ int radix() default 10; //转换数字byte/short/int/long时所用的进制数, 默认10进制
+ }
+
/**
* 配合 HttpBaseServlet 使用。
* 用于对@WebServlet对应的url进行细分。 其url必须是包含WebServlet中定义的前缀, 且不能是正则表达式
@@ -72,6 +111,8 @@ public abstract class HttpBaseServlet extends HttpServlet {
String[] methods() default {};//允许方法(不区分大小写),如:GET/POST/PUT,为空表示允许所有方法
String comment() default ""; //备注描述
+
+ WebParam[] params() default {};
}
/**
diff --git a/src/org/redkale/net/http/Rest.java b/src/org/redkale/net/http/Rest.java
index 86801b973..1a5258f2f 100644
--- a/src/org/redkale/net/http/Rest.java
+++ b/src/org/redkale/net/http/Rest.java
@@ -65,6 +65,8 @@ public final class Rest {
final String attrDesc = Type.getDescriptor(org.redkale.util.Attribute.class);
final String authDesc = Type.getDescriptor(HttpBaseServlet.AuthIgnore.class);
final String actionDesc = Type.getDescriptor(HttpBaseServlet.WebAction.class);
+ final String webparamDesc = Type.getDescriptor(HttpBaseServlet.WebParam.class);
+ final String sourcetypeDesc = Type.getDescriptor(HttpBaseServlet.ParamSourceType.class);
final String serviceTypeString = serviceType.getName().replace('.', '/');
final Class userType = getSuperUserType(baseServletClass);
@@ -215,14 +217,14 @@ public final class Rest {
final int maxStack = 3 + params.length;
List varInsns = new ArrayList<>();
int maxLocals = 4;
- boolean hasVisitWebAction = false;
final String jsvar = entry.jsvar.isEmpty() ? null : entry.jsvar;
int argIndex = 0;
- List