diff --git a/src/org/redkale/boot/ApiDocs.java b/src/org/redkale/boot/ApiDocs.java index 2f67f2040..abf5e6dba 100644 --- a/src/org/redkale/boot/ApiDocs.java +++ b/src/org/redkale/boot/ApiDocs.java @@ -126,6 +126,7 @@ public class ApiDocs extends HttpBaseServlet { parammap.put("type", ptype.getName() + (isarray ? "[]" : "")); parammap.put("src", param.src()); parammap.put("comment", param.comment()); + parammap.put("required", param.required()); paramsList.add(parammap); if (ptype.isPrimitive() || ptype == String.class) continue; if (typesmap.containsKey(ptype.getName())) continue; @@ -188,7 +189,7 @@ public class ApiDocs extends HttpBaseServlet { in = new FileInputStream(doctemplate); } if (in == null) in = ApiDocs.class.getResourceAsStream("apidoc-template.html"); - String content = Utility.read(in).replace("${content}", json); + String content = Utility.read(in).replace("'${content}'", json); in.close(); FileOutputStream outhtml = new FileOutputStream(new File(app.getHome(), "apidoc.html")); outhtml.write(content.getBytes("UTF-8")); diff --git a/src/org/redkale/boot/apidoc-template.html b/src/org/redkale/boot/apidoc-template.html index 08dec1f55..7b835eba0 100644 --- a/src/org/redkale/boot/apidoc-template.html +++ b/src/org/redkale/boot/apidoc-template.html @@ -29,7 +29,7 @@ var servlet = jsoncontent.servers[i].servlets[j]; if (html.length > 2) html.push('  '); html.push(' ' + (servlet.comment || '未知模块') + ''); - html.push(' 请求URL描 述鉴 权参 数 (红色: Header; 蓝色: Cookie)输 出'); + html.push(' 请求URL描 述鉴 权参 数 (粗体: 必填项; 红色: Header; 蓝色: Cookie)输 出'); for (var k = 0; k < servlet.actions.length; k++) { var action = servlet.actions[k]; html.push(' '); @@ -47,9 +47,10 @@ if (param.name == '&') { paramshtml.push('内置 ' + t + ' 当前用户'); } else { - var c = ' style="font-weight:bold;"'; - if (param.src == "HEADER") c = ' style="color:red;font-weight:bold;"'; - if (param.src == "COOKIE") c = ' style="color:blue;font-weight:bold;"'; + var w = param.required ? "font-weight:bold;" : ""; + var c = ' style="' + w + '"'; + if (param.src == "HEADER") c = ' style="color:red;' + w + '"'; + if (param.src == "COOKIE") c = ' style="color:blue;' + w + '"'; paramshtml.push(' ' + param.name + ' ' + t + ' ' + param.comment + ''); } } @@ -90,7 +91,7 @@ diff --git a/src/org/redkale/net/http/HttpBaseServlet.java b/src/org/redkale/net/http/HttpBaseServlet.java index e0c196319..9ccc391e6 100644 --- a/src/org/redkale/net/http/HttpBaseServlet.java +++ b/src/org/redkale/net/http/HttpBaseServlet.java @@ -89,6 +89,8 @@ public abstract class HttpBaseServlet extends HttpServlet { ParamSourceType src() default ParamSourceType.PARAMETER; //参数来源类型 int radix() default 10; //转换数字byte/short/int/long时所用的进制数, 默认10进制 + + boolean required() default true; //参数是否必传 } @Documented diff --git a/src/org/redkale/net/http/Rest.java b/src/org/redkale/net/http/Rest.java index 0096746f8..5f3b141f1 100644 --- a/src/org/redkale/net/http/Rest.java +++ b/src/org/redkale/net/http/Rest.java @@ -262,6 +262,7 @@ public final class Rest { final Class ptype = param.getType(); String n = null; String comment = ""; + boolean required = true; int radix = 10; RestHeader annhead = param.getAnnotation(RestHeader.class); @@ -297,6 +298,7 @@ public final class Rest { RestParam annpara = param.getAnnotation(RestParam.class); if (annpara != null) radix = annpara.radix(); if (annpara != null) comment = annpara.comment(); + if (annpara != null) required = annpara.required(); if (n == null) n = (annpara == null || annpara.name().isEmpty()) ? null : annpara.name(); if (n == null && ptype == userType) n = "&"; //用户类型特殊处理 if (n == null) { @@ -312,7 +314,7 @@ public final class Rest { && (entry.name.startsWith("find") || entry.name.startsWith("delete")) && params.length == 1) { if (ptype.isPrimitive() || ptype == String.class) n = "#"; } - paramlist.add(new Object[]{param, n, ptype, radix, comment, annpara, annsid, annaddr, annhead, anncookie}); + paramlist.add(new Object[]{param, n, ptype, radix, comment, required, annpara, annsid, annaddr, annhead, anncookie}); } Map actionMap = new LinkedHashMap<>(); @@ -354,9 +356,9 @@ public final class Rest { av0 = mv.visitAnnotation(webparamsDesc, true); AnnotationVisitor av1 = av0.visitArray("value"); //设置 WebParam - for (Object[] ps : paramlist) { //{param, n, ptype, radix, comment, annpara, annsid, annaddr, annhead, anncookie} - final boolean ishead = ((RestHeader) ps[8]) != null; //是否取getHeader 而不是 getParameter - final boolean iscookie = ((RestCookie) ps[9]) != null; //是否取getCookie + for (Object[] ps : paramlist) { //{param, n, ptype, radix, comment, required, annpara, annsid, annaddr, annhead, anncookie} + final boolean ishead = ((RestHeader) ps[9]) != null; //是否取getHeader 而不是 getParameter + final boolean iscookie = ((RestCookie) ps[10]) != null; //是否取getCookie AnnotationVisitor av2 = av1.visitAnnotation(null, webparamDesc); av2.visit("name", (String) ps[1]); @@ -365,6 +367,7 @@ public final class Rest { av2.visitEnum("src", sourcetypeDesc, ishead ? HttpBaseServlet.ParamSourceType.HEADER.name() : (iscookie ? HttpBaseServlet.ParamSourceType.COOKIE.name() : HttpBaseServlet.ParamSourceType.PARAMETER.name())); av2.visit("comment", (String) ps[4]); + av2.visit("required", (Boolean) ps[5]); av2.visitEnd(); } av1.visitEnd(); @@ -377,11 +380,12 @@ public final class Rest { Class ptype = (Class) ps[2]; int radix = (Integer) ps[3]; String comment = (String) ps[4]; - RestParam annpara = (RestParam) ps[5]; - RestSessionid annsid = (RestSessionid) ps[6]; - RestAddress annaddr = (RestAddress) ps[7]; - RestHeader annhead = (RestHeader) ps[8]; - RestCookie anncookie = (RestCookie) ps[9]; + boolean required = (Boolean) ps[5]; + RestParam annpara = (RestParam) ps[6]; + RestSessionid annsid = (RestSessionid) ps[7]; + RestAddress annaddr = (RestAddress) ps[8]; + RestHeader annhead = (RestHeader) ps[9]; + RestCookie anncookie = (RestCookie) ps[10]; final boolean ishead = annhead != null; //是否取getHeader 而不是 getParameter final boolean iscookie = anncookie != null; //是否取getCookie diff --git a/src/org/redkale/net/http/RestParam.java b/src/org/redkale/net/http/RestParam.java index 2f20949f7..8cbd3437b 100644 --- a/src/org/redkale/net/http/RestParam.java +++ b/src/org/redkale/net/http/RestParam.java @@ -28,5 +28,7 @@ public @interface RestParam { int radix() default 10; //转换数字byte/short/int/long时所用的进制数, 默认10进制 + boolean required() default true; //参数是否必传 + String comment() default ""; //备注描述 }