查看原文
其他

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

ImportNew 2022-04-28

The following article is from Java旅途 Author Java旅途

(给ImportNew加星标,提高Java技能)

作者Java旅途/ 周明尧(本文来自作者投稿)

今天给大家安利一款接口文档生成器——JApiDocs。


Swagger 想必大家都用过吧,非常方便,功能也十分强大。如果非要说Swagger 有什么缺点,想必就是注解写起来比较麻烦。如果我说有一款不用写注解,就可以生成文档的工具,你心动了吗?他就是我们今天的主角——JApiDocs。


下面我们一起来看看如何使用!


1. 添加依赖


<dependency> <groupId>io.github.yedaxia</groupId> <artifactId>japidocs</artifactId> <version>1.3</version></dependency>


2. 配置生成参数


我们新建一个项目,然后随便写一个 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); // 执行生成文档


3. 编码规范


由于 JApiDocs 是通过解析 Java  源码来实现的,因此如果要想实现想要的文档,还是需要遵循一定的规范。


3.1 类注释、方法注释和属性注释


如果想生成类的注释,可以直接在类上加注释,也可以通过加 @Description 来生成。


/** * 用户接口类 */@RequestMapping("/api/user")@RestControllerpublic class UserController {}
/** * @author Java旅途 * @Description 用户接口类 * @Date 2020-06-15 21:46 */@RequestMapping("/api/user")@RestControllerpublic 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);}


生成的文档效果如下:


请求参数

参数名类型必须描述
ageint年龄


如果提交的表单是 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. 高级配置


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;}


5. 总结


JApiDocs 就介绍到这里了,优势劣势大家很容易就看出来了。几乎不需要注释即可生成接口文档,仅有的几个注释我们也可以通过 IDE 来自动生成。但是 JApiDocs 不具备 Swagger 在线调试功能。如果有一天 JApiDocs 支持在线调试后,那时候肯定会有一大波追随者,毕竟写代码的都不愿意写多余的注解。


推荐阅读  点击标题可跳转

在 Java 中正确使用注释

使用 Java 注解自动化处理对应关系实现注释代码化

Spring Boot 中使用 Swagger2 构建强大的 RESTful API 文档

看完本文有收获?请转发分享给更多人

关注「ImportNew」,提升Java技能

好文章,我在看❤️

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存