diff --git a/README.md b/README.md index d908f49a..0aedd132 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ Or a static html document. If you are tired of the numerous annotations and stro - Support for generating json return value examples. - Support for loading source code from outside the project to generate field comments (including the sources jar package). - Support for generating multiple formats of documents: Markdown, HTML5, Asciidoctor. +- Support for exporting error codes and data dictionary codes to API documentation. ## Getting started [Smart-doc Samples](https://github.com/shalousun/smart-doc-demo.git)。 ``` @@ -99,8 +100,8 @@ public class ApiDocTest { //since 1.7.5 //add data dictionary config.setDataDictionaries( - ApiDataDictionary.dict().setTitle("Order status").setEnumClass(OrderEnum.class).setValueField("code").setDescField("desc"), - ApiDataDictionary.dict().setTitle("Order status1").setEnumClass(OrderEnum.class).setValueField("code").setDescField("desc") + ApiDataDictionary.dict().setTitle("Order status").setEnumClass(OrderEnum.class).setCodeField("code").setDescField("desc"), + ApiDataDictionary.dict().setTitle("Order status1").setEnumClass(OrderEnum.class).setCodeField("code").setDescField("desc") ); long start = System.currentTimeMillis(); diff --git a/README_CN.md b/README_CN.md index 86a4337f..4d811752 100644 --- a/README_CN.md +++ b/README_CN.md @@ -17,6 +17,7 @@ smart-doc完全基于接口源码分析来生成接口文档,完全做到零 - 支持生成多种格式文档:Markdown、HTML5、Asciidoctor。 - 轻易实现在Spring Boot服务上在线查看静态HTML5 api文档。 - 开放文档数据,可自由实现接入文档管理系统。 +- 支持导出错误码和定义在代码中的各种字典码到接口文档。 ## Getting started smart-doc使用和测试可参考[smart-doc demo](https://gitee.com/sunyurepository/api-doc-test.git)。 ``` @@ -113,8 +114,8 @@ public class ApiDocTest { //since 1.7.5 //文档添加数据字典 config.setDataDictionaries( - ApiDataDictionary.dict().setTitle("订单状态").setEnumClass(OrderEnum.class).setValueField("code").setDescField("desc"), - ApiDataDictionary.dict().setTitle("订单状态1").setEnumClass(OrderEnum.class).setValueField("code").setDescField("desc") + ApiDataDictionary.dict().setTitle("订单状态").setEnumClass(OrderEnum.class).setCodeField("code").setDescField("desc"), + ApiDataDictionary.dict().setTitle("订单状态1").setEnumClass(OrderEnum.class).setCodeField("code").setDescField("desc") ); diff --git a/RELEASE.md b/RELEASE.md index a62347f2..3400c98a 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -103,14 +103,16 @@ 5. 优化AllInOne的markdown展示,生成时带上自动产生的序号。 #### 版本号:1.7.5 -- 更新日期:待定 +- 更新日期:2019-11-06 - 更新内容: 1. 优化文档中错误列表的标题,可根据语言环境变化显示中文或因为。 2. 解决项目外jar中内部类生成文档错误的bug。 3. 支持环形依赖分析。只要你敢写! 4. 修改使用SpringMvc或者SpringBoot上传时接口的Content-Type显示错误。 5. 支持设置项目作为markdown的一级标题。 - 6. 修改方法注释相同引起的html链接跳转错误 + 6. 修改方法注释相同引起的html链接跳转错误。 + 7. 添加生成AllInOne的覆盖配置项,默认自动加版本号不覆盖。 + 8. 新增枚举字典码导出到文档的功能。 \ No newline at end of file diff --git a/src/main/java/com/power/doc/builder/DocBuilderTemplate.java b/src/main/java/com/power/doc/builder/DocBuilderTemplate.java index c3942691..ddd17f0f 100644 --- a/src/main/java/com/power/doc/builder/DocBuilderTemplate.java +++ b/src/main/java/com/power/doc/builder/DocBuilderTemplate.java @@ -193,7 +193,7 @@ public List buildDictionary(ApiConfig config) { } List dataDictList = new ArrayList<>(); Object[] objects = clzz.getEnumConstants(); - String valueMethodName = "get" + StringUtil.firstToUpperCase(apiDataDictionary.getValueField()); + String valueMethodName = "get" + StringUtil.firstToUpperCase(apiDataDictionary.getCodeField()); String descMethodName = "get" + StringUtil.firstToUpperCase(apiDataDictionary.getDescField()); Method valueMethod = clzz.getMethod(valueMethodName); Method descMethod = clzz.getMethod(descMethodName); diff --git a/src/main/java/com/power/doc/model/ApiDataDictionary.java b/src/main/java/com/power/doc/model/ApiDataDictionary.java index b107895b..58fb5fbd 100644 --- a/src/main/java/com/power/doc/model/ApiDataDictionary.java +++ b/src/main/java/com/power/doc/model/ApiDataDictionary.java @@ -21,9 +21,9 @@ public class ApiDataDictionary { private String enumClassName; /** - * value field + * code field */ - private String valueField; + private String codeField; /** * description field @@ -53,12 +53,12 @@ public ApiDataDictionary setEnumClass(Class enumClass) { return this; } - public String getValueField() { - return valueField; + public String getCodeField() { + return codeField; } - public ApiDataDictionary setValueField(String valueField) { - this.valueField = valueField; + public ApiDataDictionary setCodeField(String codeField) { + this.codeField = codeField; return this; } diff --git a/src/test/java/com/power/doc/ApiDocTest.java b/src/test/java/com/power/doc/ApiDocTest.java index 847ca470..893994b4 100644 --- a/src/test/java/com/power/doc/ApiDocTest.java +++ b/src/test/java/com/power/doc/ApiDocTest.java @@ -20,17 +20,6 @@ */ public class ApiDocTest { - /** - * 简单型接口,不需要指定请求头,并且项目是maven的. - */ -/* - @Test - public void testBuilderControllersApiSimple() { - //将生成的文档输出到d:\md目录下,严格模式下api-doc会检测Controller的接口注释 - ApiDocBuilder.builderControllersApi("d:\\md",true); - } -*/ - /** * 包括设置请求头,缺失注释的字段批量在文档生成期使用定义好的注释 */ @@ -53,7 +42,7 @@ public void testBuilderControllersApi() { //SourcePath.path().setDesc("加载项目外代码").setPath("E:\\ApplicationPower\\ApplicationPower\\Common-util\\src\\main\\java") ); config.setDataDictionaries( - ApiDataDictionary.dict().setTitle("订单字典").setEnumClass(OrderEnum.class).setValueField("code").setDescField("desc") + ApiDataDictionary.dict().setTitle("订单字典").setEnumClass(OrderEnum.class).setCodeField("code").setDescField("desc") ); //设置请求头,如果没有请求头,可以不用设置 /* config.setRequestHeaders( @@ -76,48 +65,6 @@ public void testBuilderControllersApi() { RevisionLog.getLog().setRevisionTime("2018/12/16").setAuthor("chen2").setRemarks("测试2").setStatus("修改").setVersion("V2.0") ); - List apiDataDictionaryList = config.getDataDictionaries(); - try { - List apiDocDictList = new ArrayList<>();//模板中遍历这个字典表生成字典文档 - int order = 0; - for (ApiDataDictionary apiDataDictionary : apiDataDictionaryList) { - System.out.println("dictionary:" + apiDataDictionary.getTitle()); - order++; - ApiDocDict apiDocDict = new ApiDocDict(); - apiDocDict.setOrder(order);//设置方便在文档中的小结顺序 - apiDocDict.setTitle(apiDataDictionary.getTitle()); - Class clzz = apiDataDictionary.getEnumClass(); - if (Objects.isNull(clzz)) { - if (StringUtil.isEmpty(apiDataDictionary.getEnumClassName())) { - throw new RuntimeException(" enum class name can't be null."); - } - //如果没有设置class那么检查是否设置了字符串类型的class name - clzz = Class.forName(apiDataDictionary.getEnumClassName()); - } - if (!clzz.isEnum()) { - throw new RuntimeException(clzz.getCanonicalName() + " is not an enum class."); - } - List dataDictList = new ArrayList<>(); - Object[] objects = clzz.getEnumConstants(); - String valueMethodName = "get" + StringUtil.firstToUpperCase(apiDataDictionary.getValueField()); - String descMethodName = "get" + StringUtil.firstToUpperCase(apiDataDictionary.getDescField()); - Method valueMethod = clzz.getMethod(valueMethodName); - Method descMethod = clzz.getMethod(descMethodName); - for (Object object : objects) { - Object val = valueMethod.invoke(object); - Object desc = descMethod.invoke(object); - DataDict dataDict = new DataDict(); - dataDict.setDesc(desc.toString()); - dataDict.setValue(val.toString()); - dataDictList.add(dataDict); - System.out.println("enum value=" + val + "desc=" + desc); - } - apiDocDict.setDataDictList(dataDictList); - apiDocDictList.add(apiDocDict); - } - } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException | ClassNotFoundException e) { - e.fillInStackTrace(); - } long start = System.currentTimeMillis();