update readme
This commit is contained in:
parent
bc5dd886b0
commit
85789c8c7b
|
@ -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();
|
||||||
|
|
|
@ -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")
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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. 新增枚举字典码导出到文档的功能。
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in New Issue