diff --git a/src/org/redkale/boot/RestDocs.java b/src/org/redkale/boot/RestDocs.java index 76c848eff..c58237966 100644 --- a/src/org/redkale/boot/RestDocs.java +++ b/src/org/redkale/boot/RestDocs.java @@ -92,7 +92,7 @@ public class RestDocs extends HttpBaseServlet { if (Modifier.isStatic(field.getModifiers())) continue; Map fieldmap = new LinkedHashMap<>(); - fieldmap.put("type", field.getType().isArray() ? (field.getType().getComponentType().getName()+"[]") : field.getType().getName()); + fieldmap.put("type", field.getType().isArray() ? (field.getType().getComponentType().getName() + "[]") : field.getType().getName()); Comment comment = field.getAnnotation(Comment.class); if (comment != null) fieldmap.put("comment", comment.value()); @@ -107,6 +107,8 @@ public class RestDocs extends HttpBaseServlet { typesmap.put(ptype.getName(), typemap); } + actionmap.put("result", action.result().getName()); + actionmap.put("ret", action.ret()); actionsList.add(actionmap); } actionsList.sort((o1, o2) -> ((String) o1.get("url")).compareTo((String) o2.get("url"))); diff --git a/src/org/redkale/boot/restdoc-template.html b/src/org/redkale/boot/restdoc-template.html index 11d4d51a0..0696cfe43 100644 --- a/src/org/redkale/boot/restdoc-template.html +++ b/src/org/redkale/boot/restdoc-template.html @@ -27,9 +27,9 @@ for (var i = 0; i < jsoncontent.servers.length; i++) { for (var j = 0; j < jsoncontent.servers[i].servlets.length; j++) { var servlet = jsoncontent.servers[i].servlets[j]; - if (html.length > 2) html.push('  '); - html.push(' ' + (servlet.comment || '未知模块') + ''); - html.push(' 请求URL描 述鉴 权参 数 (红色: Header; 蓝色: Cookie)'); + if (html.length > 2) html.push('  '); + html.push(' ' + (servlet.comment || '未知模块') + ''); + html.push(' 请求URL描 述鉴 权参 数 (红色: Header; 蓝色: Cookie)输 出'); for (var k = 0; k < servlet.actions.length; k++) { var action = servlet.actions[k]; html.push(' '); @@ -55,14 +55,16 @@ } paramshtml.push(''); html.push('' + paramshtml.join('') + ''); + var rt = action.result.substring(action.result.lastIndexOf('.') + 1); + html.push('' + (action.ret ? ("RetResult<" + rt + ">") : rt) + ''); html.push(''); } } } for (var type in classmap) { - html.push('  '); - html.push(' ' + type + ''); - html.push(' '); + html.push(' '); + html.push(' '); + html.push('
 
' + type + '
'); for (var fieldname in classmap[type]) { var field = classmap[type][fieldname]; var t = field.type.substring(field.type.lastIndexOf('.') + 1); diff --git a/src/org/redkale/net/http/HttpBaseServlet.java b/src/org/redkale/net/http/HttpBaseServlet.java index 5be38f0fa..717d89320 100644 --- a/src/org/redkale/net/http/HttpBaseServlet.java +++ b/src/org/redkale/net/http/HttpBaseServlet.java @@ -113,6 +113,10 @@ public abstract class HttpBaseServlet extends HttpServlet { String comment() default ""; //备注描述 WebParam[] params() default {}; + + Class result() default Object.class; //输出结果的数据类型 + + boolean ret() default true; //是否为RetResult包装 } /** diff --git a/src/org/redkale/net/http/Rest.java b/src/org/redkale/net/http/Rest.java index 106416607..e9e55f833 100644 --- a/src/org/redkale/net/http/Rest.java +++ b/src/org/redkale/net/http/Rest.java @@ -194,7 +194,6 @@ public final class Rest { } } if (entrys.isEmpty()) return null; //没有可WebAction的方法 - Map actionMap = new LinkedHashMap<>(); for (final MappingEntry entry : entrys) { final Method method = entry.mappingMethod; final Class returnType = method.getReturnType(); @@ -301,6 +300,7 @@ public final class Rest { paramlist.add(new Object[]{param, n, ptype, radix, comment, annpara, annsid, annaddr, annhead, anncookie}); } + Map actionMap = new LinkedHashMap<>(); { //设置 WebAction boolean reqpath = false; @@ -339,11 +339,22 @@ public final class Rest { } av3.visitEnd(); } + boolean ret = returnType == RetResult.class; + java.lang.reflect.Type rt = method.getGenericReturnType(); + boolean subrt = (ret && rt instanceof ParameterizedType); + java.lang.reflect.Type[] subts = subrt ? ((ParameterizedType) rt).getActualTypeArguments() : null; + Class cz = subts == null ? returnType + : (subts[0] instanceof Class ? (Class) subts[0] : (subts[0] instanceof ParameterizedType ? (Class) ((ParameterizedType) subts[0]).getRawType() : Object.class)); + av0.visit("result", Type.getType(Type.getDescriptor(subrt ? cz : returnType))); + av0.visit("ret", ret); + av0.visitEnd(); actionMap.put("url", url); actionMap.put("actionid", entry.actionid); actionMap.put("comment", entry.comment); actionMap.put("methods", entry.methods); + actionMap.put("result", subrt ? cz.getName() : returnType.getName()); + actionMap.put("ret", ret); } List> paramMaps = new ArrayList<>();