• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

lkadoc: 这是一款基于SpringBoot平台,能够自动生成功能强大的接口文档框架,可以一劳 ...

原作者: [db:作者] 来自: 网络 收藏 邀请

简介

  Lkadoc是一款开源的接口文档自动生成工具,基于SpringBoot平台,拥有非常强大的接口文档管理功能。为解决Java后台开发人员编写接口文档、调试接口而生。同时提供了简洁、大气、功能丰富的接口文档UI操作界面,方便后端与前端之间的接口对接。

愿景

  我们愿成为java开发人员最好的基友,从手动编写接口文档的痛苦中解救出来,丢弃难用的Postman,工作效率从此翻倍,不再加班,有更多的时间陪伴家人。

特性


  • 无侵入:引入它不会对现有项目产生影响。悄然降临,寂静无声。

  • 整合方便:一个启动注解就可以完成所有配置。手到擒来,唾手可得。

  • 牛逼的注解:一个注解可描述多个参数,多层参数结构,甚至能做到接口零注解。登峰造极,纵横天地。

  • 狂拽的调试:支持在线调试接口,同步、异步压力测试接口。丧心病狂,举世无双。

  • 酷炫的界面:文档界面简洁大气,能同时满足前端和后端开发人员的审美观。参数的展示方式可以在表格和JSON格式间自由切换。 如你所愿,心随我意。

  • 强大的辅助:支持文档聚合、文档下载、对象属性分组、新接口标记显示、动态修改参数状态(高亮、标记、说明)、全局绑定token、密码验证等强大的辅助功能加持。锦上添花,如虎添翼。

展示

自动生成的接口文档UI页面

新版风格

接口调试页面

在这里插入图片描述

快速入门

用IDEA创建一个SpringBoot项目,项目名叫LkadocDemo,点击Next

在这里插入图片描述

勾选Spring web组件,点击Finish

在这里插入图片描述

在LkadocDemo项目的pom.xml文件中引入lkadoc的依赖

<!--Lkadoc包--><dependency>	<groupId>com.github.liukaitydn</groupId>	<artifactId>lkadoc-api</artifactId>	<version>1.3.9</version></dependency>

在LkadocDemo项目启动类LkadocDemoApplication上加上@LKADocument注解

@LKADocument(basePackages="com.lkad.api")@SpringBootApplicationpublic class LkadocDemoApplication {    public static void main(String[] args) {        SpringApplication.run(LkadocDemoApplication.class, args);    }}

在com.lkad.api包下面准备一个用户登录注册模块类-LKADemoController

@LKAType(value="用户登录注册模块")@RestController@RequestMapping("user")public class LKADemoController {     @LKAMethod(value="登录")    @LKAParam(names= {"name","pwd"},values= {"用户名","密码"})    @LKARespose(names= {"code","msg"},values= {"状态码","消息"})    @PostMapping("login")    public Map<String,Object> login(String name, String pwd) {        Map<String,Object> map = new HashMap<>();        map.put("code",200);        map.put("msg","登录成功,欢迎"+name+"光临本系统");        return map;    }}

启动项目,打开浏览器,输入地址http://127.0.0.1:8080/lkadoc.html

在这里插入图片描述

如果能看到如上界面,那么就恭喜客官,Lkadoc能够为您服务了

注解介绍

  Lkadoc 是基于注解来自动生成接口文档的,注解功能非常强大,要想灵活的使用 Lkadoc,那么就必须掌握注解相关的知识。Lkadoc为 swagger 大部分注解做了兼容处理,只需修改引入的包路径为com.lk.api.*即可。

@LKADocument

#@LKADocument是加在SpringBoot启动类上的注解,必须加上,否则Lkadoc接口文档不可使用,用来描述项目信息,该注解下的属性可以代替application配置文件里面的lkad相关配置,非常方便,常用属性:basePackages:扫描接口的包路径,多个用","号隔开,指定父包路径可以扫描所有父包下的子包路径【必须】#例如:basePackages="com.lkad.api,com.lkad.admin"projectName:项目名称【可选】#例如:projectName="Lkadoc测试项目"description:项目描述【可选】#例如:description="该项目用来教学Lkadoc的使用"serverNames:要聚合的项目地址,"^"前面是项目名称(可省略),后面是项目的地址(也可以用域名),多个用","号隔开,用来聚合其它项目的接口信息,可以在UI界面切换【可选】#例如:serverNames="物业项目^192.168.0.52:8081,租房系统^192.168.0.77:8001"version:项目的版本号,配合@LKAMethod注解的version属性可以快速定位新接口【可选】#例如:version="1.0"enabled:接口文档启动开关,true是开启,false是禁用,默认为开启【可选】#例如:enabled=truesconAll:是否开启对未加注解描述的参数进行自动识别,默认为false【可选】#例如:sconAll=falsepassword:设置查看接口文档所需的密码,默认不需要密码【可选】#例如:password="123456"classNum:设置扫描类的最大数量,默认是5000个类,防止内存溢出【可选】#例如:classNum="10000"

注意:@LKADocument注解相关属性也可以在application.properties文件中通过lkad.basePackages="x.x.x"的方式配置,但@LKADocument这个注解不能省略。如果application.properties文件中配置了lkad属性,那么@LKADocument注解中的属性会全部失效,意思就是说两种方式只能二选一

@LKAType

#用来描述类的信息,常用属性:value:类的作用【必须】#例如:value="测试类"description:类的描述【可选】#例如:description="该类只是用来测试"hidden:是否在UI界面隐藏该类的信息,默认为false,如果设置为ture那么该类下在的所有接口也会隐藏【可选】#例如:hidden=falseorder:排序,值越少越靠前【可选】#例如:order=1

@LKAMethod

#用来描述接口的信息,常用属性:value:接口的作用【必须】#例如:value="用户登录"description:接口的描述【可选】#例如:description="用于APP端登录的接口"contentType:请求头ContentType类型,默认为application/x-www-form-urlencoded【可选】#例如:contentType="application/json"author:作者【可选】#例如:author="L.K"createTime:接口创建时间【可选】#例如:createTime="2021-08-08"updateTime:接口修改时间【可选】#例如:updateTime="2021-10-01"hidden:是否在UI界面隐藏该接口,默认为false【可选】#例如:hidden=falseversion:接口版本号,如果项目版本号相同,在UI界面会标记为新接口【可选】#例如:version="1.0"download:是否是下载的方法,如果该接口涉及到下载文件必须设置成true,默认是false【可选】#例如:download=falsetoken:是否需要token验证,只标识该接口需要token验证,不会影响正常业务,默认是true【可选】#例如:token=trueorder:排序,数字越少越靠前【可选】#例如:order=1directory:指定上级目录(这里目录是指@LKAType的value属性值,上级目录必须存在,不然不会展示在接口文档,默认当前类的目录)【可选】#例如:directory="用户管理"

@LKAParam / @LKAParams

#用来描述请求参数的信息,带s复数属性代表可以设置多个参数,但要注意参数顺序。带s和不带s设置时只能二选一,建议大家不管是多个参数还是单个参数,都用带s复数属性,带s复数属性要更灵活,更智能。常用属性:name/names:参数名称【必须】(用name设置参数名称时必须;用names设置参数名称时可省略,但JDK版本要1.8以上,编译的时候还要加上–parameters启动参数,这样Lkadoc可自动获取到参数名称,目前测试JDK11不加–parameters参数也可以识别参数名称,否则必须)#例如:#单个参数配置:name="name"#多个参数配置:names={"name","pwd","age"} //这里如果和接口入参顺序一样,可省略不用配置#或者,#@LKAParams({    #@LKAParam(name="name",...),    #@LKAParam(name="pwd",...),    #@LKAParam(name="age",...)#})#注意,@LKAParams用法的其它属性才name都一样,后面不再举例。value/values:参数作用【必须】#例如:#单个参数配置:value="姓名"#多个参数配置:values={"姓名","密码","年龄"}description/descriptions:参数的描述【可选】#例如:#单个参数配置:description="姓名不能超过5个汉字"#多个参数配置:descriptions={"姓名不能超过5个汉字","密码不能少于6位","年龄在18岁和60岁之间"}dataType/dataTypes:数据类型【可选】(用dataType配置时默认值String.class;用dataTypes配置时可自动获取参数的数据类型,可省略不配置,但要注意参数的顺序。)#例如:#单个参数配置:dataType=String.class //这里可省略,因为默认是String#多个参数配置:dataTypes={String.class,Date.class,Integer.class} //如果和接口入参顺序一致可省略自动获取required/requireds:是否必传,默认为true【可选】(更简便的用法是在name属性值后面加"-n"或者在value属性值前面加“n~”代表非必传参数)#例如:#单个参数配置:required=false 或者 name="name-n" 或者 value="n~用户名" //三种方式都代表非必传(3选1)#多个参数配置:#requireds={false,true,false} #或者 names={"name-n","pwd","age-n"} #或者 values={"n~用户名","密码","n~年龄"} //三种方式效果都一样,用户名和年龄非必传,密码必传(3选1)paramType/paramTypes:参数位置,query、header、path三选一【可选】(用paramType配置时默认为query;用paramTypes配置时Lkadoc可根据参数注解@PathVariable、@RequestHeader自动获取参数位置,可省略不配)#例如:#单个参数配置:paramType="query" //默认是query,可以省略不配置#多个参数配置:paramTypes={"query","header","path"} //参数如果加上了@PathVariable、@RequestHeader注解,可自动获取参数位置,可省略不配置isArray/isArrays:该参数是否是集合或数组,默认false【可选】#例如:#单个参数配置:isArray=false#多个参数配置:isArrays={false,true,false}testData/testDatas:测试数据【可选】(更简便的用法是在value后面的"^"符号后面加上测试数据)#例如:#单个参数配置:testData="张三" 或者 value="姓名^张三" //两种方式2选1#多个参数配置:testDatas={"张三","123456","22"} #或者 values={"n~姓名^张三","密码^123456","n~年龄^22"} //两种方式2选1 type:入参对象类型【可选】(当接口请求参数是一个对象时使用,但一般不需要设置,可自动识别)#例如:type=User.class  //一般不用配置,可自动识别group:和type配合使用,对象参数分组,可过滤没必要的参数【可选】#例如:group="add"  //add是一个组名,事先在User对象的参数上面配置好的

@LKAModel

#用来描述实体类的信息#常用属性:value:属性的作用【可选】description:属性的描述【可选】

@LKAProperty

#用来描述实体类的属性的信息,和@LKAParam注解属性用法差不多,这里不再举例了#常用属性:value:属性的作用【必须】description:属性的描述【可选】hidden:是否在UI界面隐藏该属性,默认为false【可选】testData:测试数据【可选】(更简便的用法是在value后面的"^"符号后面加上测试数据)required:是否必传,默认为true【可选】(更简便的用法是在value前面加"n~"代表非必传)isArray:是否是数组或集合,不设置也可自动识别【可选】type:当属性为对象类型时,可以用type来指定,不设置也可自动识别【可选】groups:用来进行参数分组设置,可设置多个组名【可选】(required在分组时用法是在groups属性里面的组名后面加"-n"代表不是必传,不加默认是必传)#例如: groups={"add","update-n","info"}

@LKAGroup

#@LKAGroup是一个入参注解,作用是指定对象是哪组参数用来作为入参

@LKARespose/@LKAResposes

#用来描述响应参数的信息,和@LKAParam注解属性用法差不多,这里不再举例了#常用属性name/names:参数名称,和type参数二选一【必须】value/values:参数作用【必须】description/descriptions:参数的描述【必须】dataType/dataTypes:参数数据类型,当使用dataTypes不设置也可以自动识别【可选】isArray/isArrays:是否是集合或数组,默认false【可选】type:出参对象类型,和name/names参数二选一,可自动识别【可选】group:和type配合使用,对象参数分组,可过滤没必要的参数【可选】#父参数parentName:父参名称【可选】parentValue:父参作用【可选】parentDescription:父参描述【可选】parentIsArray:父参是否是数组或集合【可选】#爷参数grandpaName:爷参名称【可选】grandpaValue:爷参作用【可选】grandpaDescription:爷参描述【可选】grandpaIsArray:爷参是否是数组或集合【可选】

基础应用

  在基础应用中,我会用大量的案例来演示各种场景Lkadoc的使用方法和技巧,能够让大家在案例中快速掌握Lkadoc的基本使用。同时你也能从中体会到Lkadoc的便利与强大。

简单的请求入参示例

以快速入门的案例为基础,修改@LKADocument注解如下

//增加项目名称和和项目说明@LKADocument(basePackages="com.lkad.api",projectName = "演示项目",description = "用于Lkadoc教学项目")@SpringBootApplicationpublic class LkadocDemoApplication {    public static void main(String[] args) {        SpringApplication.run(LkadocDemoApplication.class, args);    }}

在LKADemoController类下面我们再增加一个注册的方法

//注意:JDK8及以上@LKAParam注解的names={"name","pwd","email","age"}配置可省略@LKAMethod(value="用户注册",description="APP的注册接口",version="1.0",createTime="2021-08-08",author="LK")@LKAParam(names={"name","pwd","email","age"},values= {"用户名^张凡","密码^123abc","n~邮箱^[email protected]","n~年龄^21"})@PostMapping("reg")public String reg(String name,String pwd,String email,Integer age) {    if(name == null || "".equals(name) || pwd == null || "".equals(pwd)){        return "注册失败";    }    return "注册成功";}

启动项目,打开浏览器,输入地址http://127.0.0.1:8080/lkadoc.html ,界面如下:

在这里插入图片描述

path和header请求入参示例

再增加一个path和header入参的测试方法,Lkadoc能够自动识别@RequestHeader、@PathVariable注解

@LKAMethod(value="path和header入参")@LKAParam(names={"token","name","email"},values= {"令牌^aaaa","n~姓名^瓜瓜","n~邮箱^[email protected]"})@PostMapping("getUser/{name}/{email}")public String getUser(@RequestHeader("token") String token,                      @PathVariable("name") String name,                      @PathVariable("email") String email) {    return "测试结果:token="+token+",name="+name+",email="+email;}

重启项目,刷新Lkadoc界面如下:

在这里插入图片描述

数组请求入参示例

再增加一个数组入参的测试方法

//isArrays = {true,false}代表第一个参数是数组,第二参数不是数组@LKAMethod(value="数组入参")@LKAParam(names={"ids","name"},values= {"用户ID^1001","n~姓名^瓜瓜"},isArrays = {true,false})@PostMapping("array")public String array(Integer[] ids,String name) {    return "测试结果:ids="+ Arrays.toString(ids)+",name="+name;}

重启项目,刷新Lkadoc界面如下:

在这里插入图片描述

文件上传请求入参示例

再增加一个文件上传测试方法

//ContentType.FORMDATA常量的值为multipart/form-data@LKAMethod(value="文件批量上传",contentType=ContentType.FORMDATA)@LKAParam(names= "files",values="上传文件",isArrays= true)@PostMapping("fileUpload")public String fileUpload(MultipartFile[] files) {    String fileNames = "";    if(files != null) {        for (MultipartFile f : files) {            if("".equals(fileNames)) {                fileNames = f.getOriginalFilename();            }else {                fileNames = fileNames + ","+f.getOriginalFilename();            }        }    }    return "上传成功,文件名:"+fileNames;}

重启项目,刷新Lkadoc界面如下:

在这里插入图片描述

文件下载示例

再增加一个文件下载的测试方法

//@LKAMethod注解的download=true代表这个方法是一个文件下载的方法,测试这个方法事先要在D盘准备一个test.txt文件。至于文件下载的业务逻辑,这里不做讲解。@LKAMethod(value="文件下载",download=true)@PostMapping("fileDownload")public void fileDownload(HttpServletResponse response) throws Exception {    String path = "D:\\test.txt";    File file = new File(path);    String ext = file.getName().substring(file.getName().lastIndexOf(".") + 1).toUpperCase();    InputStream fis = new BufferedInputStream(new FileInputStream(path));    byte[] buffer = new byte[fis.available()];    fis.read(buffer);    fis.close();    response.reset();    response.addHeader("Content-Disposition", "attachment;filename=" + new String(file.getName().getBytes()));    response.addHeader("Content-Length", "" + file.length());    OutputStream toClient = new BufferedOutputStream(response.getOutputStream());    response.setContentType("application/octet-stream");    toClient.write(buffer);    toClient.flush();    toClient.close();}

重启项目,刷新Lkadoc界面如下:

在这里插入图片描述

简单的对象请求入参示例

  当我们入参是一个对象时,如果该对象上有@LKAModel注解,并且它的属性上有@LKAProperty注解,那么Lkadoc会去自动扫描这个对象信息,我们无需在接口上加额外的注解去描述对象参数。这样如果我们用对象去操作入参的话,可以大大减少接口上的注解数量,显得更加简洁。

在com.lkad.model包下面准备一个角色对象

@LKAModelpublic class Role {    @LKAProperty(value = "角色id^101")    private Integer id;    @LKAProperty(value = "n~角色^名称")    private String name;    public Integer getId() {return id;}    public void setId(Integer id) {this.id = id;}    public String getName() {return name;}    public void setName(String name) { this.name = name; }}

增加一个简单的对象请求入参的测试方法

@LKAMethod("基本对象入参")@GetMapping("getRole")public Role getRole(Role role) {    return role;}

重启项目,刷新Lkadoc界面如下:

在这里插入图片描述

复杂的对象请示入参示例

在com.lkad.model包下再增加两个对象address和User,加上之前Role一共有3个对象

@LKAModelpublic class Address {    @LKAProperty(value="地址ID^1")    private Integer id;    @LKAProperty(value="n~地址信息^深圳市龙华区")    private String info;    public Integer getId() { return id; }    public void setId(Integer id) { this.id = id; }    public String getInfo() { return info; }    public void setInfo(String info) { this.info = info; }}
@LKAModelpublic class User {    @LKAProperty(value
                      

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap