diff --git a/src/org/redkale/boot/ApiDocs.java b/src/org/redkale/boot/ApiDocs.java index 8b29da77e..1ceeecb16 100644 --- a/src/org/redkale/boot/ApiDocs.java +++ b/src/org/redkale/boot/ApiDocs.java @@ -81,6 +81,40 @@ public class ApiDocs extends HttpBaseServlet { actionmap.put("comment", action.comment()); List paramsList = new ArrayList<>(); actionmap.put("params", paramsList); + List results = new ArrayList<>(); + for (final Class rtype : action.results()) { + results.add(rtype.getName()); + if (typesmap.containsKey(rtype.getName())) continue; + + final Map> typemap = new LinkedHashMap<>(); + Class loop = rtype; + do { + if (loop == null || loop.isInterface()) break; + for (Field field : loop.getDeclaredFields()) { + if (Modifier.isFinal(field.getModifiers())) continue; + if (Modifier.isStatic(field.getModifiers())) continue; + + Map fieldmap = new LinkedHashMap<>(); + fieldmap.put("type", field.getType().isArray() ? (field.getType().getComponentType().getName() + "[]") : field.getGenericType().getTypeName()); + + Comment comment = field.getAnnotation(Comment.class); + if (comment != null) { + fieldmap.put("comment", comment.value()); + } else { + Column col = field.getAnnotation(Column.class); + if (col != null) fieldmap.put("comment", col.comment()); + } + + if (servlet.getClass().getAnnotation(Rest.RestDynamic.class) != null) { + if (field.getAnnotation(RestAddress.class) != null) continue; + } + + typemap.put(field.getName(), fieldmap); + } + } while ((loop = loop.getSuperclass()) != Object.class); + typesmap.put(rtype.getName(), typemap); + } + actionmap.put("results", results); for (WebParam param : method.getAnnotationsByType(WebParam.class)) { final Map parammap = new LinkedHashMap<>(); final boolean isarray = param.type().isArray(); diff --git a/src/org/redkale/boot/apidoc-template.html b/src/org/redkale/boot/apidoc-template.html index 33cbfb642..d072144b0 100644 --- a/src/org/redkale/boot/apidoc-template.html +++ b/src/org/redkale/boot/apidoc-template.html @@ -55,7 +55,13 @@ } paramshtml.push(''); html.push('' + paramshtml.join('') + ''); - html.push('' + action.result.replace(//g,">").replace(/([a-zA-Z0-9_\$]+\.)+/g, "") + ''); + var rs = []; + rs.push(action.result.replace(//g, ">").replace(/([a-zA-Z0-9_\$]+\.)+/g, "")); + var results = action.results || []; + for (var r = 0; r < results.length; r++) { + rs.push('' + results[r].replace(/([a-zA-Z0-9_\$]+\.)+/g, "") + ''); + } + html.push('' + rs.join("
") + ''); html.push(''); } } @@ -66,7 +72,7 @@ html.push(' '); for (var fieldname in classmap[type]) { var field = classmap[type][fieldname]; - var t = field.type.replace(//g,">").replace(/([a-zA-Z0-9_\$]+\.)+/g, ""); + var t = field.type.replace(//g, ">").replace(/([a-zA-Z0-9_\$]+\.)+/g, ""); html.push(' '); } html.push('
' + fieldname + '' + t + '' + (field.comment || '') + '
'); diff --git a/src/org/redkale/net/http/HttpBaseServlet.java b/src/org/redkale/net/http/HttpBaseServlet.java index 36b59e726..e0c196319 100644 --- a/src/org/redkale/net/http/HttpBaseServlet.java +++ b/src/org/redkale/net/http/HttpBaseServlet.java @@ -121,9 +121,11 @@ public abstract class HttpBaseServlet extends HttpServlet { String comment() default ""; //备注描述 + boolean inherited() default true; //是否能被继承, 当 HttpBaseServlet 被继承后该方法是否能被子类继承 + String result() default "Object"; //输出结果的数据类型 - boolean inherited() default true; //是否能被继承, 当 HttpBaseServlet 被继承后该方法是否能被子类继承 + Class[] results() default {}; //输出结果的数据类型集合,由于结果类型可能是泛型而注解的参数值不支持泛型,因此加入明细数据类型集合 } /**