Swagger之外的选择
今天给大家安利一款接口文档生成器——JApiDocs。
swagger想必大家都用过吧,非常方便,功能也十分强大。如果要说swaager有什么缺点,想必就是注解写起来比较麻烦。如果我说有一款不用写注解,就可以生成文档的工具,你心动了吗?他就是我们今天的主角——JApiDocs。
下面我们一起来看看如何使用!
一、添加依赖
<dependency>
<groupId>io.github.yedaxia</groupId>
<artifactId>japidocs</artifactId>
<version>1.3</version>
</dependency>
二、配置生成参数
我们新建一个项目,然后随便写一个main方法,增加生成文档的配置,然后运行main方法。
DocsConfig config = new DocsConfig();
config.setProjectPath("F:\\Java旅途\\japi-docs"); // 项目根目录
config.setProjectName("japi-docs"); // 项目名称
config.setApiVersion("V1.0"); // 声明该API的版本
config.setDocsPath("F:\\test"); // 生成API 文档所在目录
config.setAutoGenerate(Boolean.TRUE); // 配置自动生成
Docs.buildHtmlDocs(config); // 执行生成文档
三、编码规范
由于JApiDocs是通过解析Java源码来实现的,因此如果要想实现想要的文档,还是需要遵循一定的规范。
3.1 类注释、方法注释和属性注释
如果我们想生成类的注释,我们可以直接在类上加注释,也可以通过加@description来生成。
/**
* 用户接口类
*/
@RequestMapping("/api/user")
@RestController
public class UserController {}
/**
* @author Java旅途
* @Description 用户接口类
* @Date 2020-06-15 21:46
*/
@RequestMapping("/api/user")
@RestController
public class UserController {}
如果我们想生成方法的注释,只能直接加注释,不能通过加@description来生成。
/**
* 查询用户
* @param age 年龄
* @return R<User>
*/
@GetMapping("/list")
public R<User> list(@RequestParam int age){
User user = new User("Java旅途", 18);
return R.ok(user);
}
JApiDocs可以自动生成实体类,关于实体类属性的注释有三种方式,生成的效果都是一样的,如下:
/**
* 用户名称
*/
private String name;
/**
* 用户年龄
*/
private int age;
// 用户名称
private String name;
// 用户年龄
private int age;
private String name;// 用户名称
private int age;// 用户年龄
他除了支持咱们常用的model外,还支持IOS的model生成效果如下:
3.2 请求参数
如果提交的表单是 application/x-www-form-urlencoded
类型的key/value
格式,则我们通过@param注解来获取参数,在参数后面添加注释,示例如下:
/**
* @param age 年龄
*/
@GetMapping("/list")
public R<User> list(@RequestParam int age){
User user = new User("Java旅途", 18);
return R.ok(user);
}
生成的文档效果如下:
请求参数
参数名 | 类型 | 必须 | 描述 |
---|---|---|---|
age | int | 否 | 年龄 |
如果提交的表单是 application/json
类型的json
数据格式,如下:
/**
* @param user
* @return
*/
@PostMapping("/add")
public R<User> add(@RequestBody User user){
return R.ok(user);
}
生成的文档效果如下:
请求参数
{
"name": "string //用户名称",
"age": "int //用户年龄"
}
3.3 响应结果
我们知道,如果
Controller
声明了@RestController
,SpringBoot会把返回的对象直接序列成Json数据格式返回给前端。 JApiDocs也利用了这一特性来解析接口返回的结果,但由于JApiDocs是静态解析源码的,因此你要明确指出返回对象的类型信息,JApiDocs支持继承、泛型、循环嵌套等复杂的类解析。
因此我们不需要再写注释,它会根据我们的返回结果进行解析,效果如下:
返回结果:
{
"code": "int",
"msg": "string",
"data": {
"name": "string //用户名称",
"age": "int //用户年龄"
}
}
最终,我们生成的接口文档,如下:
四、高级配置
4.1 @ApiDoc
如果你不希望把所有的接口都导出,我们可以在配置中设置config.setAutoGenerate(Boolean.FALSE);然后再想要生成的接口上添加@ApiDoc。
@ApiDoc有以下三个属性:
- result: 这个可以直接声明返回的对象类型,如果你声明了,将会覆盖SpringBoot的返回对象
- url: 请求URL,扩展字段,用于支持非SpringBoot项目
- method: 请求方法,扩展字段,用于支持非SpringBoot项目
@ApiDoc(result = User.class, url = "/api/user/view", method = "post")
4.2 @Ignore
如果你不想导出对象里面的某个字段,可以给这个字段加上@Ignore
注解,这样JApiDocs导出文档的时候就会自动忽略掉了。
public class User {
@Ignore
private int age;
}
五、总结
JApiDocs就介绍到这里了,优势劣势大家很容易就看出来了。几乎不需要注释即可生成接口文档,仅有的几个注释我们也可以通过ide来自动生成。但是JApiDocs不具备swagger在线调试功能。如果有一天JApiDocs支持在线调试后,那时候肯定会有一大波追随者,毕竟写代码的谁喜欢写多余的注解!~
Swagger之外的选择的更多相关文章
- Solr图形化界面banana:除Hue之外的选择
最近Hue+Solr 方案原型验证有了一些进展.正好也收到了Google的大数据专家Sam的来件询问进展,我答复如下: Sam, 你好. 已经把Kafka+flume+solr的实时索引搭建起来了, ...
- EPPLUS之外的选择,EXCEL的操作(NPOI,POI(java))
NPOI 编辑 NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 中文名 NPOI 优 势 传统操作Excel遇到的 ...
- Node.js之绝对选择
几年前,完全放弃Asp.net,彻底脱离微软方向.Web开发,在公司团队中,一概使用Node.js.Mongodb.Git,替换Asp.net mvc.Sql server和Tfs.当时来看,这是高风 ...
- Node.js之绝对选择(2018版)
[这篇是很早期的文字,由于引用较广泛,担心误导,故按照现在的情形做一些修改] 几年前,完全放弃Asp.net,彻底脱离微软方向.Web开发,在公司团队中,一概使用Node.js.Mongodb.Git ...
- ASP.NET Core 2 学习笔记(十三)Swagger
Swagger也算是行之有年的API文件生成器,只要在API上使用C#的<summary />文件注解标签,就可以产生精美的线上文件,并且对RESTful API有良好的支持.不仅支持生成 ...
- springfox-swagger原理解析与使用过程中遇到的坑
swagger简介 swagger确实是个好东西,可以跟据业务代码自动生成相关的api接口文档,尤其用于restful风格中的项目,开发人员几乎可以不用专门去维护rest api,这个框架可以自动为你 ...
- 再探banana
在Solr图形化界面:除Hue之外的选择中列出了banana的如下一些不足,今天再次研究这些地方是否有方案可以解决. 1.sunburst图功能没法用. 2.中文有些地方会显示%2B%4C之类的一串字 ...
- delphi dev 汉化
//把以下文件复制到记事本中,并保存为DevChs.ini放在exe的目录下 //有这个cxLocalizer控件 //主窗体创建的时候 if (fileexists(ExtractFilePath( ...
- Excel里内嵌在线翻译
本来寻思着继续写点系统运行日志跟踪技术的,但早晨哥家领导从单位打来电话,让帮助她的闺蜜搞一个excel翻译的问题,总部IT搞不定.我过去是用excel做了几年工作,却都是些数学计算,跟翻译也扯不上啊: ...
随机推荐
- JavaScript之倔强的字符串
关于倔强的JavaScript字符串:不可以被修改 我们是字符串 我们的口号是:你可以消灭我,但是你不能改变我 JavaScript字符串是不可改变的,当真是这样的吗? 让我们来试验一下. var n ...
- PHP相关_几个操作记录下
1.JSON转换 var cloneTesttaskList = <?php echo json_encode(json_encode($cloneTesttaskList));?>; v ...
- 【C++】简介
注意:以下内容摘自文献[1],修改了部分内容. 前言 关于软件产业发展史,不妨访问“首次全面深度解密华为方舟编译器”一文,不仅详细介绍了软件产业的发展,还有华为方舟编译器产生的背景,值得一看! 1. ...
- 小工具之apk黑屏自动检测
在打包测试的时候经常发送给测试组之后,发现已进入游戏就黑屏,这个就浪费了测试组的精力,如果要测试多款产品的话,就会因为黑屏问题做很多无用功,这是程序就需要在发给测试的时候自己先测试产品会不会黑屏.同样 ...
- Java IO(十五)FilterReader 和 FilterWriter、FilterReader 子类 PushBackReader
Java IO(十五)FilterReader 和 FilterWriter.FilterReader 子类PushBackReader 一.介绍 FilterReader 和 FilterWrite ...
- ForkJoinPool分支合并框架-工作窃取
Fork/Join 框架 Fork/Join 框架:就是在必要的情况下,将一个大任务,进行拆分(fork)成 若干个小任务(拆到不可再拆时), 再将一个个的小任务运算的结果进行 join 汇总 For ...
- 使用锚点定位不改变url同时平滑的滑动到锚点位置,不会生硬的直接到锚点位置
使用锚点定位不改变url同时平滑的滑动到锚点位置,不会生硬的直接到锚点位置 对前端来说锚点是一个很好用的技术,它能快速定位到预先埋好的位置. 但是美中不足的是它会改变请求地址url,当用户使用了锚点的 ...
- Java实现 LeetCode 810 黑板异或游戏 (分析)
810. 黑板异或游戏 一个黑板上写着一个非负整数数组 nums[i] .小红和小明轮流从黑板上擦掉一个数字,小红先手.如果擦除一个数字后,剩余的所有数字按位异或运算得出的结果等于 0 的话,当前玩家 ...
- Java实现 蓝桥杯VIP 算法训练 数列
问题描述 给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是: 1,3,4,9,10,12,13,- (该序列实际上就是 ...
- Java实现高效便捷还容易懂的排序算法
PS:我现在越来越认为排序大法是,很深的算法了,就是简单的几个步骤,网上的大佬们能给你玩出花来(ง •_•)ง public class zimuzhenlie2 { public static vo ...