IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring boot框架 配置open api 3.0(基于swagger ui) 集成knife4j,快捷生成API文档规范 -> 正文阅读

[Java知识库]Spring boot框架 配置open api 3.0(基于swagger ui) 集成knife4j,快捷生成API文档规范





API文档集成与增强

集成open api

官网文档: springdoc-openapi

  1. 依赖导入
<dependency>
	<groupId>org.springdoc</groupId>
	<artifactId>springdoc-openapi-ui</artifactId>
	<version>1.6.11</version>
</dependency>

  1. 配置文件设置
# open api配置
springdoc:
  packages-to-scan: com.example.swagger3knife4j.controller
  swagger-ui:
    enabled: true
  api-docs:
    enabled: true

  1. 文档设置
@Configuration
public class OpenApiConfig {
    @Bean
    public OpenAPI api() {
        return new OpenAPI().info(new Info().title("文档标题")
                .description("文档描述")
                .version("v1.0.0"));
    }
}

到此配置就完成了,接下来便是使用open api的规范来生成对应的API文档





open api使用方法

  1. 首先通过@Tag给文档添加注释,通过@Operation给每个接口添加文档注释
@Tag(name = "用户接口")
@RestController
@RequestMapping(PRIVATE_PATH + "/user")
public class UserController {

    @GetMapping("/getOneUser")
    @Operation(summary = "随机获取一个用户")
    public User getOneUser() {
        return new User("姓名", "13899999999");
    }
}

  1. 通过@Schema给自定义对象(入参和返回相同)添加文档注释
@Data
@AllArgsConstructor
@Schema(description = "用户信息")
public class User {

    @Schema(description = "姓名")
    private String name;

    @Schema(description = "电话")
    private String phone;
}

  1. 访问地址:http://localhost:8888/swagger-ui/index.html

到此一个简单的接口文档便生成了,下面是效果图:
在这里插入图片描述
实体注释:
在这里插入图片描述

如上就是open api3的全部设置,它是基于swagger-ui设计的,因此界面和swagger没什么区别。

不过open api3的注解与swagger2完全不同,下面是两者注解的对应关系,方便swagger2的使用者快速开发。




open api与swagger注解方法的对应关系

open api的注解与swagger的有很大区别,open api的写法更为简单易懂,在实际使用时也不会像swagger的注解那样让人迷惑。


如下是两者注解的对应关系:
在这里插入图片描述
官网链接: 官网链接


下面介绍一款swagger的增强框架—knife4j,它的界面美观性因人而异,但是在使用体验上绝对甩swagger界面好多倍。废话不多说,直接将knife4j撸进来。





集成knife4j

官网文档: Knife4j

  1. 依赖导入
<dependency>
	<groupId>com.github.xiaoymin</groupId>
	<artifactId>knife4j-springdoc-ui</artifactId>
	<version>3.0.3</version>
</dependency>

ok,配置好之后,直接访问Knife4j的界面试试:http://localhost:8888/doc.html

Swagger和Knife4j的访问地址不同,但是都可以修改。

  • http://localhost:8888/swagger-ui/index.html
  • http://localhost:8888/doc.html

在这里插入图片描述
这时,Knife4j的访问界面都是一片空白的,不过不用慌,因为我们还需要为Knife4j添加相应的文件目录


  1. 在此前为的配置文件OpenApiConfig中,添加Knife4j的文档设置,这里所有前缀为“PRIVATE_PATH”的接口,都用过“基础接口”这个目录来访问
@Bean
public GroupedOpenApi publicApi() {
    return GroupedOpenApi.builder()
            .group("基础接口")
            .pathsToMatch(PRIVATE_PATH + "/**")
            .build();
}

此时重启,Knife4j的页面内容如下:
在这里插入图片描述
在这里插入图片描述


  1. 相关功能点介绍
  • 主页:展示了一些接口的统计信息
  • SwaggerModels:展示了所有的传输对象
  • 文档管理:提供全局参数设置(如在请求头添加token登)、离线文档下载(Knife4j提供导出4种格式的离线文档(Html/Markdown/Word/OpenAPI))、以及一些其它个性化设置。
  • 用户接口”:这些目录就是我们生成好的接口文档了。





API文档的常用内容

为@PathVariable的参数添加文档注释

添加@Parameter参数就行

    @GetMapping("/getName/{userName}")
    @Operation(summary = "获取用户名")
    public String getName(@Parameter(required = true, name = "userName", description = "用户名")
                                 @PathVariable("userName") String userName) {
        return userName;
    }

在这里插入图片描述



接口分组

接口分组的方式很简单,即在文件中设置其它分组,同时设置不同的请求路径即可

    @Bean
    public GroupedOpenApi publicApi() {
        return GroupedOpenApi.builder()
                .group("公共接口")
                .pathsToMatch(PUBLIC_PATH + "/**")
                .build();
    }
    @Bean
    public GroupedOpenApi privateApi() {
        return GroupedOpenApi.builder()
                .group("私有接口")
                .pathsToMatch(PRIVATE_PATH + "/**")
                .build();
    }



设置全局请求头(token)

如果需要为某个分组添加必填字段的话,可以通过如下方式实现:

    @Bean
    public GroupedOpenApi tokenApi(OperationCustomizer operationCustomizer) {
        return GroupedOpenApi.builder()
                .group("鉴权")
                .pathsToMatch(PRIVATE_PATH + "/**")
                .addOperationCustomizer(operationCustomizer)
                .build();
    }

    @Bean
    public OperationCustomizer operationCustomizer() {
        return (operation, handlerMethod) -> operation.addParametersItem(
                new Parameter()
                        .in("header")
                        .required(true)
                        .description("token 验证")
                        .name("token"));
    }

此时该分组的接口,必须传递该字段(当然这只是一种规范,实际请求时还需要自行加上token登必传字段的校验)
在这里插入图片描述

在使用文档时,可以在全局参数设置中添加改参数,避免每个接口都要再填一遍(确定后刷新生效)。
在这里插入图片描述



在特定环境屏蔽API文档

开发和测试环境需要文档,但是上线之后,就必须把这些文档给屏蔽调。

比如生成环境prod,只需要在生成环境的yml文件中需改如下springdoc的配置即可:

springdoc:
  packages-to-scan: com.example.swagger3knife4j.controller
  swagger-ui:
    enabled: false
  api-docs:
    enabled: false





源码地址

源码: github仓库地址

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 20:42:45  更:2022-09-24 20:46:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 8:50:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码