update readme

This commit is contained in:
oppofind 2019-11-06 16:23:47 +08:00
parent bc5dd886b0
commit 85789c8c7b
6 changed files with 18 additions and 67 deletions

View File

@ -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 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 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 generating multiple formats of documents: Markdown, HTML5, Asciidoctor.
- Support for exporting error codes and data dictionary codes to API documentation.
## Getting started ## Getting started
[Smart-doc Samples](https://github.com/shalousun/smart-doc-demo.git)。 [Smart-doc Samples](https://github.com/shalousun/smart-doc-demo.git)。
``` ```
@ -99,8 +100,8 @@ public class ApiDocTest {
//since 1.7.5 //since 1.7.5
//add data dictionary //add data dictionary
config.setDataDictionaries( config.setDataDictionaries(
ApiDataDictionary.dict().setTitle("Order status").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).setValueField("code").setDescField("desc") ApiDataDictionary.dict().setTitle("Order status1").setEnumClass(OrderEnum.class).setCodeField("code").setDescField("desc")
); );
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();

View File

@ -17,6 +17,7 @@ smart-doc完全基于接口源码分析来生成接口文档完全做到零
- 支持生成多种格式文档Markdown、HTML5、Asciidoctor。 - 支持生成多种格式文档Markdown、HTML5、Asciidoctor。
- 轻易实现在Spring Boot服务上在线查看静态HTML5 api文档。 - 轻易实现在Spring Boot服务上在线查看静态HTML5 api文档。
- 开放文档数据,可自由实现接入文档管理系统。 - 开放文档数据,可自由实现接入文档管理系统。
- 支持导出错误码和定义在代码中的各种字典码到接口文档。
## Getting started ## Getting started
smart-doc使用和测试可参考[smart-doc demo](https://gitee.com/sunyurepository/api-doc-test.git)。 smart-doc使用和测试可参考[smart-doc demo](https://gitee.com/sunyurepository/api-doc-test.git)。
``` ```
@ -113,8 +114,8 @@ public class ApiDocTest {
//since 1.7.5 //since 1.7.5
//文档添加数据字典 //文档添加数据字典
config.setDataDictionaries( config.setDataDictionaries(
ApiDataDictionary.dict().setTitle("订单状态").setEnumClass(OrderEnum.class).setValueField("code").setDescField("desc"), ApiDataDictionary.dict().setTitle("订单状态").setEnumClass(OrderEnum.class).setCodeField("code").setDescField("desc"),
ApiDataDictionary.dict().setTitle("订单状态1").setEnumClass(OrderEnum.class).setValueField("code").setDescField("desc") ApiDataDictionary.dict().setTitle("订单状态1").setEnumClass(OrderEnum.class).setCodeField("code").setDescField("desc")
); );

View File

@ -103,14 +103,16 @@
5. 优化AllInOne的markdown展示生成时带上自动产生的序号。 5. 优化AllInOne的markdown展示生成时带上自动产生的序号。
#### 版本号1.7.5 #### 版本号1.7.5
- 更新日期:待定 - 更新日期:2019-11-06
- 更新内容: - 更新内容:
1. 优化文档中错误列表的标题,可根据语言环境变化显示中文或因为。 1. 优化文档中错误列表的标题,可根据语言环境变化显示中文或因为。
2. 解决项目外jar中内部类生成文档错误的bug。 2. 解决项目外jar中内部类生成文档错误的bug。
3. 支持环形依赖分析。只要你敢写! 3. 支持环形依赖分析。只要你敢写!
4. 修改使用SpringMvc或者SpringBoot上传时接口的Content-Type显示错误。 4. 修改使用SpringMvc或者SpringBoot上传时接口的Content-Type显示错误。
5. 支持设置项目作为markdown的一级标题。 5. 支持设置项目作为markdown的一级标题。
6. 修改方法注释相同引起的html链接跳转错误 6. 修改方法注释相同引起的html链接跳转错误。
7. 添加生成AllInOne的覆盖配置项默认自动加版本号不覆盖。
8. 新增枚举字典码导出到文档的功能。

View File

@ -193,7 +193,7 @@ public class DocBuilderTemplate {
} }
List<DataDict> dataDictList = new ArrayList<>(); List<DataDict> dataDictList = new ArrayList<>();
Object[] objects = clzz.getEnumConstants(); 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()); String descMethodName = "get" + StringUtil.firstToUpperCase(apiDataDictionary.getDescField());
Method valueMethod = clzz.getMethod(valueMethodName); Method valueMethod = clzz.getMethod(valueMethodName);
Method descMethod = clzz.getMethod(descMethodName); Method descMethod = clzz.getMethod(descMethodName);

View File

@ -21,9 +21,9 @@ public class ApiDataDictionary {
private String enumClassName; private String enumClassName;
/** /**
* value field * code field
*/ */
private String valueField; private String codeField;
/** /**
* description field * description field
@ -53,12 +53,12 @@ public class ApiDataDictionary {
return this; return this;
} }
public String getValueField() { public String getCodeField() {
return valueField; return codeField;
} }
public ApiDataDictionary setValueField(String valueField) { public ApiDataDictionary setCodeField(String codeField) {
this.valueField = valueField; this.codeField = codeField;
return this; return this;
} }

View File

@ -20,17 +20,6 @@ import java.util.Objects;
*/ */
public class ApiDocTest { public class ApiDocTest {
/**
* 简单型接口不需要指定请求头并且项目是maven的.
*/
/*
@Test
public void testBuilderControllersApiSimple() {
//将生成的文档输出到d:\md目录下严格模式下api-doc会检测Controller的接口注释
ApiDocBuilder.builderControllersApi("d:\\md",true);
}
*/
/** /**
* 包括设置请求头缺失注释的字段批量在文档生成期使用定义好的注释 * 包括设置请求头缺失注释的字段批量在文档生成期使用定义好的注释
*/ */
@ -53,7 +42,7 @@ public class ApiDocTest {
//SourcePath.path().setDesc("加载项目外代码").setPath("E:\\ApplicationPower\\ApplicationPower\\Common-util\\src\\main\\java") //SourcePath.path().setDesc("加载项目外代码").setPath("E:\\ApplicationPower\\ApplicationPower\\Common-util\\src\\main\\java")
); );
config.setDataDictionaries( config.setDataDictionaries(
ApiDataDictionary.dict().setTitle("订单字典").setEnumClass(OrderEnum.class).setValueField("code").setDescField("desc") ApiDataDictionary.dict().setTitle("订单字典").setEnumClass(OrderEnum.class).setCodeField("code").setDescField("desc")
); );
//设置请求头如果没有请求头可以不用设置 //设置请求头如果没有请求头可以不用设置
/* config.setRequestHeaders( /* config.setRequestHeaders(
@ -76,48 +65,6 @@ public class ApiDocTest {
RevisionLog.getLog().setRevisionTime("2018/12/16").setAuthor("chen2").setRemarks("测试2").setStatus("修改").setVersion("V2.0") RevisionLog.getLog().setRevisionTime("2018/12/16").setAuthor("chen2").setRemarks("测试2").setStatus("修改").setVersion("V2.0")
); );
List<ApiDataDictionary> apiDataDictionaryList = config.getDataDictionaries();
try {
List<ApiDocDict> 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<DataDict> 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(); long start = System.currentTimeMillis();