前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swagger+knife4j 易于整合SpringBoot的OpenAPI文档生成利器

Swagger+knife4j 易于整合SpringBoot的OpenAPI文档生成利器

作者头像
Dream城堡
发布2022-01-07 17:25:23
1.3K0
发布2022-01-07 17:25:23
举报
文章被收录于专栏:Spring相关
1.Swagger简介

前端和后端的联调离不开API文档,而手动编写API文档是一项耗时又费力的操作。Swagger正是基于简化API文档的输出的一个优秀的开源框架,通过OpenAPI的规范呈现接口信息,方便的提供测试和联调。这样,如果按照新的开发模式,在开发新版本或者迭代版本的时候,只需要更新Swagger描述文件,就可以自动生成接口文档和客户端服务端代码,做到调用端代码、服务端代码以及接口文档的一致性。

官方地址:

代码语言:javascript
复制
https://swagger.io
在这里插入图片描述
在这里插入图片描述
2.Springboot集成Swagger2及常见配置
第一步:添加依赖
代码语言:javascript
复制
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

2.9.2的版本是用的最多的,具体的可以直接去maven的官网去搜索,找一个使用量最多的版本即可。

第二步:配置

新建config包,创建SwaggerConfig类

代码语言:javascript
复制
@EnableSwagger2
@Configuration
public class Swagger2Config {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
             .apiInfo(apiInfo())
             .select()
             //为当前包路径,控制器类包
             .apis(RequestHandlerSelectors.basePackage("com.fdd.controller"))
            .paths(PathSelectors.any())
             .build();
    }
    //构建 api文档的详细信息函数
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
            //页面标题
           .title("XX平台API接口文档")
            //创建人
           .contact(new Contact("test", "http://www.test.cc",  
                                "XXX@qq.com"))
           //版本号
          .version("1.0")
           //描述
          .description("系统API描述")
          .build();
    }

这里的配置也比较简单。这里有很多选项供我们去配置。如果我们的项目有多个组,只需要创建多个Docket即可。这时候扫描的包换成每个组的包路径。

第三步:controller类中配置

新建一个controller包,然后创建HelloController类

代码语言:javascript
复制
@Api("Hello控制类")
@RestController 
public class HelloController {
    @GetMapping(value = "/user")
    public User getUser(){
        return new User("愚公要移山","123456");
    }
    @ApiOperation("可以指定参数的API")
    @PostMapping("/param")
    public String hello2(@ApiParam("用户名") String name){
        return "hello" + name;
    }
}

这里我们可以看出,使用注解就可以对这个类、方法、字段等等进行解释说明。其他的字段还有很多,在使用的时候会有相应的提示,可以自己试一遍:

img
img
3.常用注解

@Api 标识一个java类型是文档类,用controller类的类名上

@ApiModel 表示一个实体类/模型文档,用在类名上;

@ApiModelProperty 作用在属性上,添加属性描述;

@ApiOperation 作用在接口类的方法上,控制方法的相关描述;

@ApiImplicitParam 作用在接口方法上,描述单个参数信息,只能作用在方法上;

@ApiImplicitParams 作用在接口方法上,@ApiImplicitParam参数组;

@ApiParam 作用在接口方法上,描述单个参数信息,属性基本与@ApiImplicitParam一样,但可以作用在方法、参数、属性上;

下面分别对每个注解的常用参数作讲解。

@Api:

value:字符串,对controller类的作用描述,代替原来的description(已过时),一般用此属性;

tags:字符串数组,标签组,同样可以描述controller的作用;

@ApiModel

value:字符串,模型的简短别名,使得在文档的导航中便于识别;

description:字符串,模型的附加描述;

@ApiOperation

value:字符串,方法的功能描述;

tags:字符串数组,标签组,同样可以描述方法的作用;

response:ClassType,显示指出返回的对象类型;在响应示例中会显示出改对象的字段以及示例、描述;

code:响应代码,默认200,一般不改;

@ApiModelProperty

value:字符串,字段描述;

required:boolean;指定参数是否必须,默认false;

example:字符串,参数值的示例

@ApiImplicitParam

name:字符串,参数名;

value:字符串,参数描述;

defaultValue:字符串,参数默认值;

required:boolean,标识是否必须传值,默认false;

dataType:字符串,参数类型,可以是某个类名,也可以是基本数据类型的引用类名,如Integer;

example:字符串,参数值示例;

@ApiImplicitParams

value:@ApiImplicitParam类型数组,当方法有多个@ApiImplicitParam参数时,需要放到@ApiImplicitParams注解中

@ApiParam

name:字符串,参数名;

value:字符串,参数描述;

defaultValue:字符串,设置默认值;

required:boolean,是否必须,默认false;

example:字符串,参数值示例;

4.替换swagger-ui,选择款神器—knife4j

首先我们来看下界面功能的对比,swagger-ui界面如下:

访问地址:

代码语言:javascript
复制
http://localhost:8080/swagger-ui
在这里插入图片描述
在这里插入图片描述

knife4j界面如下:

访问地址:

代码语言:javascript
复制
http://localhost:8080/doc.html
在这里插入图片描述
在这里插入图片描述

从以上可以看出knife4j界面相比swagger-ui界面更加美观,功能更加全面,除了测试相关功能外,还提供了相应的文档管理,很方便的输出不同格式的API文档,极大的方便了接口文档的输出。

5.knife4j的使用

Knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望她能像一把匕首一样小巧,轻量,并且功能强悍!

Knife4j的前身是swagger-bootstrap-ui,为了契合微服务的架构发展,由于原来swagger-bootstrap-ui采用的是后端Java代码+前端Ui混合打包的方式,在微服务架构下显的很臃肿,因此项目正式更名为knife4j

更名后主要专注的方面

  • 前后端Java代码以及前端Ui模块进行分离,在微服务架构下使用更加灵活
  • 提供专注于Swagger的增强解决方案,不同于只是改善增强前端Ui部分
5.1 项目模块

目前主要的模块包括:

模块名称

说明

knife4j

为Java MVC框架集成Swagger的增强解决方案

knife4j-admin

云端Swagger接口文档注册管理中心,集成gateway网关对任意微服务文档进行组合集成

knife4j-extension

chrome浏览器的增强swagger接口文档ui,快速渲染swagger资源

knife4j-service

为swagger服务的一系列接口服务程序

knife4j-front

knife4j-spring-ui的纯前端静态版本,用于集成非Java语言使用

swagger-bootstrap-ui

knife4j的前身,最后发布版本是1.9.6

5.2 业务场景

不使用增强功能,纯粹换一个swagger的前端皮肤

不使用增强功能,纯粹换一个swagger的前端皮肤,这种情况是最简单的,你项目结构下无需变更

可以直接引用swagger-bootstrap-ui的最后一个版本1.9.6或者使用knife4j-spring-ui

老版本引用

代码语言:javascript
复制
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>swagger-bootstrap-ui</artifactId>
    <version>1.9.6</version>
</dependency>

新版本引用

代码语言:javascript
复制
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-ui</artifactId>
    <version>${lastVersion}</version>
</dependency>
5.3 Spring Boot项目单体架构使用增强功能

在Spring Boot单体架构下,knife4j提供了starter供开发者快速使用

代码语言:javascript
复制
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>${knife4j.version}</version>
</dependency>

该包会引用所有的knife4j提供的资源,包括前端Ui的jar包

5.4 Spring Cloud微服务架构

在Spring Cloud的微服务架构下,每个微服务其实并不需要引入前端的Ui资源,因此在每个微服务的Spring Boot项目下,引入knife4j提供的微服务starter

代码语言:javascript
复制
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-micro-spring-boot-starter</artifactId>
    <version>${knife4j.version}</version>
</dependency>

在网关聚合文档服务下,可以再把前端的ui资源引入

代码语言:javascript
复制
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>${knife4j.version}</version>
</dependency>
5.5 另外说明

不管是knife4j还是swagger-bootstrap-ui

对外提供的地址依然是doc.html

代码语言:javascript
复制
访问:http://ip:port/doc.html
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/04/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.Swagger简介
  • 2.Springboot集成Swagger2及常见配置
    • 第一步:添加依赖
      • 第二步:配置
        • 第三步:controller类中配置
        • 3.常用注解
          • @Api:
            • @ApiModel
              • @ApiOperation
                • @ApiModelProperty
                  • @ApiImplicitParam
                    • @ApiImplicitParams
                      • @ApiParam
                      • 4.替换swagger-ui,选择款神器—knife4j
                      • 5.knife4j的使用
                        • 5.1 项目模块
                          • 5.2 业务场景
                            • 5.3 Spring Boot项目单体架构使用增强功能
                              • 5.4 Spring Cloud微服务架构
                                • 5.5 另外说明
                                相关产品与服务
                                文档服务
                                文档服务(Document Service,DS)是腾讯云数据万象提供云上文档处理服务,支持多种类型的文件生成图片或 html 格式的预览,可以解决文档内容的页面展示问题,满足 PC、App 等多端的文档在线浏览需求。同时,本产品还提供文本隐私筛查能力,可以有效识别文本中的身份证号、银行卡号、手机号等敏感数据,满足数据可用性和隐私保护的各种要求。
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档