传统swagger(之前在用)接口文档的缺点:
1、代码侵入性太强。
2、写着麻烦。需要写大量的注解,太麻烦!
smart-doc的优点:
1、不需要注解,无侵入性。
2、只需要写好注释即可,界面也比较美观。
3、对一些常用的电话、地址之类的模拟的数据跟真的一样(哈哈哈)。
4、可以生成Markdown、HTML5等多种文档格式。
以下是官方对其描述的一些特性:
零注解、零学习成本、只需要写标准java注释。
基于源代码接口定义自动推导,强大的返回结构推导。
支持Spring MVC,Spring Boot,Spring Boot Web Flux(controller书写方式)。
支持Callable,Future,CompletableFuture等异步接口返回的推导。
支持JavaBean上的JSR303参数校验规范。 对json请求参数的接口能够自动生成模拟json参数。
对一些常用字段定义能够生成有效的模拟值。
支持生成json返回值示例。
支持从项目外部加载源代码来生成字段注释(包括标准规范发布的jar包)。
支持生成多种格式文档:Markdown、HTML5、Asciidoctor、Postman Collection。
轻易实现在Spring Boot服务上在线查看静态HTML5 api文档。
开放文档数据,可自由实现接入文档管理系统。
支持生成dubbo rpc文档。
使用示例
一、maven插件(推荐)
1、引入依赖
<plugin> <groupId>com.github.shalousun</groupId> <artifactId>smart-doc-maven-plugin</artifactId> <version>1.1.9</version> <configuration> <!--指定生成文档的使用的配置文件,配置文件放在自己的项目中--> <configFile>./src/main/resources/smart-doc.json</configFile> <!--指定项目名称--> <projectName>UU跑腿广告服务中心文档</projectName> </configuration> <executions> <execution> <goals> <goal>html</goal> </goals> </execution> </executions> </plugin>
|
2、添加smart-doc生成文档的配置
{ "serverUrl": "http://127.0.0.1", "isStrict": false, "allInOne": true, "outPath": "D://md2", "coverOld": true, "packageFilters": "", "md5EncryptedHtmlName": false, "projectName": "smart-doc", "skipTransientField": true, "showAuthor":true, "requestFieldToUnderline":true, "responseFieldToUnderline":true, "inlineEnum":true, "recursionLimit":7, "ignoreRequestParams":[ "org.springframework.ui.ModelMap" ], "dataDictionaries": [ { "title": "http状态码字典", "enumClassName": "com.power.common.enums.HttpCodeEnum", "codeField": "code", "descField": "message" } ],
"errorCodeDictionaries": [{ "title": "title", "enumClassName": "com.power.common.enums.HttpCodeEnum", "codeField": "code", "descField": "message" }],
"revisionLogs": [ { "version": "1.0", "status": "update", "author": "author", "remarks": "desc" } ], "customResponseFields": [ { "name": "code", "desc": "响应代码", "value": "00000" } ], "requestHeaders": [ { "name": "token", "type": "string", "desc": "desc", "required": false, "value":"55", "since": "-" } ], "rpcApiDependencies":[{ "artifactId":"SpringBoot2-Dubbo-Api", "groupId":"com.demo", "version":"1.0.0" }], "rpcConsumerConfig":"src/main/resources/consumer-example.conf", "apiObjectReplacements": [{ "className": "org.springframework.data.domain.Pageable", "replacementClassName": "com.power.doc.model.PageRequestDto" }], "apiConstants": [{ "constantsClassName": "com.power.doc.constants.RequestParamConstant" }], "sourceCodePaths": [ { "path": "src/main/java", "desc": "测试" } ] }
|
3、运行插件生成文档
最后通过ip和端口号访问即可。
二、测试类方式
1、引入依赖
<dependency> <groupId>com.github.shalousun</groupId> <artifactId>smart-doc</artifactId> <version>1.8.7</version> <scope>test</scope> </dependency>
|
2、每个项目建议都写一个测试类
import com.power.common.util.DateTimeUtil; import com.power.doc.builder.ApiDocBuilder; import com.power.doc.builder.HtmlApiDocBuilder; import com.power.doc.constants.DocGlobalConstants; import com.power.doc.model.*; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;
@RunWith(SpringRunner.class) @SpringBootTest @Slf4j public class SpringBootTest {
@Test public void testBuilderMdControllersApi() { ApiConfig config = new ApiConfig(); config.setServerUrl("http://localhost:8080");
config.setStrict(false); config.setAllInOne(true);
config.setOutPath("d:\\md");
config.setCoverOld(true); config.setProjectName("XXXXX接口文档");
config.setRequestHeaders( ApiReqHeader.header().setName("access_token").setType("string") .setDesc("Basic auth credentials").setRequired(true).setSince("v1.1.0"), ApiReqHeader.header().setName("user_uuid").setType("string").setDesc("User Uuid key") );
long start = System.currentTimeMillis(); ApiDocBuilder.buildApiDoc(config);
long end = System.currentTimeMillis(); DateTimeUtil.printRunTime(end, start); }
@Test public void testBuilderHtmlControllersApi() { ApiConfig config = new ApiConfig(); config.setServerUrl("http://192.168.6.110:8080");
config.setStrict(false);
config.setAllInOne(true);
config.setOutPath(DocGlobalConstants.HTML_DOC_OUT_PATH);
config.setProjectName("XXXXXX接口文档");
long start = System.currentTimeMillis(); HtmlApiDocBuilder.buildApiDoc(config);
long end = System.currentTimeMillis(); DateTimeUtil.printRunTime(end, start); }
}
|
3、测试生成接口文档。
我这边主要是生成的html接口文档,生成之后会在项目\src\main\resources\static\doc
这个目录下,可以直接在浏览器输入http://192.168.6.110:8080/doc/index.html#
即可访问。
4、注释说明
一定要写java注释,注释如下参考:
5、效果请查看官网所示
https://gitee.com/smart-doc-team/smart-doc/wikis/%E6%96%87%E6%A1%A3%E6%95%88%E6%9E%9C%E5%9B%BE?sort_id=1652819