你还在用 Swagger?试试这个神器!

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 你还在用 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支持在线调试后,那时候肯定会有一大波追随者,毕竟写代码的谁喜欢写多余的注解!

原创电子书

历时整整一年总结的 Java 面试 + Java 后端技术学习指南,这是本人这几年及校招的总结,各种高频面试题已经全部进行总结,按照章节复习即可,已经拿到了大厂offer。

原创思维导图

扫码或者微信搜 程序员的技术圈子 回复 面试 领取原创电子书和思维导图。

原文地址:https://sihai.blog.csdn.net/article/details/109466086

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 你还在用 Swagger?试试这个神器!


 上一篇
CTO说了,delete后不加limit,直接滚蛋! CTO说了,delete后不加limit,直接滚蛋!
点击上方 **好好学java **,选择 **星标 **公众号 重磅资讯、干货,第一时间送达 今日推荐:个人原创100W+访问量博客:点击前往,查看更多 在业务场景要求高的数据库中,对于单条删除和更新操作,在 delete 和 update
2021-04-04
下一篇 
高手都这么给 Spring MVC 做单元测试! 高手都这么给 Spring MVC 做单元测试!
点击上方 **好好学java **,选择 **星标 **公众号 重磅资讯、干货,第一时间送达 今日推荐:个人原创100W+访问量博客:点击前往,查看更多 作者:alanshelby 来源:zhuanlan.zhihu.com&#x
2021-04-04