Swagger 3.0 使用指南

2023-11-07

Swagger 3.0 使用指南


Swagger 官网地址:https://swagger.io/

1.Swagger 是什么?

API Developmentfor Everyone

Simplify API development for users, teams, and enterprises with the Swagger open source and professional toolset. Find out how Swagger can help you design and document your APIs at scale.


面向所有人的 API 开发
使用 Swagger 开源和专业工具集简化用户、团队和企业的 API 开发。 了解 Swagger 如何帮助您大规模设计和记录您的 API。

  • Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务接口。

  • (官方很自信,针对的是everyone用户)使用开源的Swagger工具集可以简化用户、团队和企业的 API 开发。

2.Swagger 与OAS 之间存在什么关系?

OpenAPI Specification

The World Standard for RESTful APIs

The OpenAPI Specification was donated to the Linux Foundation under the OpenAPI Initiative in 2015. The specification creates a RESTful interface for easily developing and consuming an API by effectively mapping all the resources and operations associated with it.


OpenAPI 规范

(全球)标准的RESTful API

OpenAPI 规范于 2015 年在 OpenAPI 倡议下捐赠给 Linux 基金会。该规范创建了一个 RESTful 接口,通过有效地映射关联的所有资源和操作来轻松开发和使用 API。

  • OAS 全称是 Open Api Specification,Open API的规范
  • Swagger 是一个开源工具,该工具遵循OpenAPI规范,是OpenAPI规范的一个实现

3.找不见Swagger官网使用说明,该怎么办?

说实话,第一次使用的时候,看遍官方所有的页面,完全找不见官方的使用方法、引入依赖、配置等。看了好多博客,真NM全是废话,光说怎么用呢,不说是怎么来的。迫于无奈,最后通过搜索关键字,找见入口内容。

步骤:

搜索关键字:java -> 选择Java Integration(Java 集成) -> 根据语言选择合适的Swagger框架

在这里插入图片描述

Java语言选择SpringFox框架即可,SpringFox官网已经存在3.0+版本。

SpringFox: 与SpringMVC继承、并且支持Swagger1.2和Swagger2.0。

springFox 官网文档地址(内容未更新,主要还是swagger2.0):https://springfox.github.io/springfox/

建议参考SprignFox的github仓库中README.MD文件:https://github.com/springfox/springfox

在这里插入图片描述

4.Swagger 使用指南

4.1 引入springfox starter依赖

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

4.2 创建SwaggerConfig配置文件

springfox 3.0 中需要使用@EnableOpenApi,@EnableSwagger2该注解已经废弃。

可参考SpringFox 官方文档:http://springfox.github.io/springfox/docs/current/#getting-started

package com.xxx.springboot.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

import java.util.Arrays;
import java.util.HashSet;

/**
 * swagger配置文件
 * @author admin
 */
@EnableOpenApi
@Configuration
public class SwaggerConfig {

    @Bean
    Docket api() {
        // springfox 的基本API配置
        return new Docket(DocumentationType.OAS_30)
                // 将映射的路径当作base Path,添加给apis
                .pathMapping("/")
                // 设置api 文档基本信息: 常见内容:版本,主题,联系人...
                .apiInfo(new ApiInfoBuilder()
                        .contact(new Contact("xxx", "www.baidu.com", "9999999@qq.com"))
                        .description("web api doc")
                        .title("WEB API DOC")
                        .version("1.0")
                        .build())
                // 分类,可根据groupName选择不同的api 列表
                .groupName("public api")
                // 设置host信息
                .host("http://192.168.0.1:8080")
                // 支持的协议
                .protocols(new HashSet<>(Arrays.asList("http", "https")))
                .enable(true)
                // 创建API 选择器
                .select()
                // 暴露的给Swagger的API,指定扫描包的接口
                .apis(RequestHandlerSelectors.basePackage("com.xxx"))
                // 符合要求的接口
                .paths(PathSelectors.ant("/user/**"))
                .build();
    }
}

注意:高版本SpringBoot与SpringFox 3.0 整合时,会出现空指针异常。

解决办法:

application.properties配置文件中添加以下内容

# springboot 高版本处理 swagger 空指针问题
spring.mvc.pathmatch.matching-strategy=ant_path_matcher

4.3 创建API接口

需要在接口上面添加springfox提供的注解.

相关注解使用可参考:https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X—Annotations#quick-annotation-overview

4.3.1 相关注解
OpenAPI
Name Description
@OpenAPIDefinition General metadata for an OpenAPI definition
@Info Info metadata for an OpenAPI definition
@Contact Properties to describe the contact person for an OpenAPI definition
@License Properties to describe the license for an OpenAPI definition
Operations
Name Description
@Operation Describes an operation or typically a HTTP method against a specific path.
@Parameter Represents a single parameter in an OpenAPI Operation.
@RequestBody Represents the body of the request in an Operation
@ApiResponse Represents the response in an Operation
@Tag Represents tags for an operation or for the OpenAPI definition.
@Server Represents servers for an operation or for the OpenAPI definition.
@Callback Describes a set of requests
@Link Represents a possible design-time link for a response.
Media
Name Description
@Schema Allows the definition of input and output data.
@ArraySchema Allows the definition of input and output data for array types.
@Content Provides schema and examples for a particular media type.
4.2 定义API接口
package com.xxx.springboot.controller;

import com.xxx.springboot.controller.response.UserResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 用户接口类
 * @author admin
 */
@Tag(name = "用户管理")
@RestController
@RequestMapping("/user")
public class UserController {

    @Operation(tags = "用户管理", summary = "获取用户信息", description = "获取指定用户的用户信息")
    @ApiResponses(value = {
            @ApiResponse(responseCode = "200", description = "成功", content = {
                    @Content(mediaType = "application/json")
            }),
            @ApiResponse(responseCode = "400", description = "失败", content = {
                    @Content(mediaType = MediaType.APPLICATION_JSON_VALUE)
            }),
    })
    @GetMapping(value = "/{user_id}")
    public UserResponse getUserInfo(
            @Parameter(name = "user_id", description = "用户信息ID")
            @PathVariable(name = "user_id") String userId) {
        return UserResponse.builder()
                .id(userId)
                .name("lisi")
                .address("shanxi")
                .age(20)
                .build();
    }
}

4.4 启用工程,浏览器访问,查看效果

地址:http://localhost:8080/swagger-ui/index.html

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swagger 3.0 使用指南 的相关文章

  • Android 中的列表(特别是 RecyclerView 和 CardView)如何工作

    请原谅我问这个问题 但我是 Android 开发新手 尽管我正在尝试了解developer android com 网站上的基础知识 但大多数示例 即使他们说它们是为 Android Studio 构建的 尚未设置为使用 Gradle 因此
  • 如何在 Openfire 中使用 smack

    你好 我计划开发一个可以连接到 gtalk facebook 等的聊天客户端 我决定将 smack API 与 openfire 一起使用 但我需要很少的指导来了解如何将它与 openfire 服务器一起使用 openfire 是否提供了基
  • 如何使用 JAVA 代码以编程方式捕获线程转储?

    我想通过 java 代码生成线程转储 我尝试使用 ThreadMXBean 为此 但我没有以正确的格式获得线程转储 因为我们正在使用jstack命令 请任何人提供一些帮助 他们是否有其他方式获取线程转储 使用任何其他 API 我想要的线程转
  • (Java) App Engine 中的静态文件无法访问

    The 示例文档 http code google com appengine docs java gettingstarted staticfiles html表示您只需将文件放在 war 或子目录 中 并且应该可以从主机访问它们 只要它
  • 将SQL数据引入jquery availabletag

    我正在尝试制作自动完成文本框 但如何将 SQL 数据包含到 jquery 可用标记并循环它 我无法根据以下代码执行该功能 任何帮助 将不胜感激 谢谢 这是我的预期输出 预期结果演示 http jsfiddle net VvETA 71 jq
  • 删除优先级队列的尾部元素

    如何删除优先级队列的尾部元素 我正在尝试使用优先级队列实现波束搜索 一旦优先级队列已满 我想删除最后一个元素 优先级最低的元素 Thanks 没有简单的方法 将元素从原始元素复制到新元素 最后一个除外 PriorityQueue remov
  • 从 MS Access 中提取 OLE 对象(Word 文档)

    我有一个 Microsoft Access 数据库 其中包含一个包含 Microsoft Word 文档的 OLE 对象字段 我试图找到代码来检索保存在 OLE 对象中的文件 以便用户可以从我的 JavaFx 应用程序中的按钮下载它 但没有
  • Android 中 localTime 和 localDate 的替代类有哪些? [复制]

    这个问题在这里已经有答案了 我想使用从 android API 获得的长值 该值将日期返回为长值 表示为自纪元以来的毫秒数 我需要使用像 isBefore plusDays isAfter 这样的方法 Cursor managedCurso
  • 为什么Iterator接口没有add方法

    In IteratorSun 添加了remove 方法来删 除集合中最后访问的元素 为什么没有add方法来向集合中添加新元素 它可能对集合或迭代器产生什么样的副作用 好的 我们开始吧 设计常见问题解答中明确给出了答案 为什么不提供 Iter
  • 如何使用正则表达式验证 1-99 范围?

    我需要验证一些用户输入 以确保输入的数字在 1 99 范围内 含 这些必须是整数 Integer 值 允许前面加 0 但可选 有效值 1 01 10 99 09 无效值 0 007 100 10 5 010 到目前为止 我已经制定了以下正则
  • 在 Clojure 中解压缩 zlib 流

    我有一个二进制文件 其内容由zlib compress在Python上 有没有一种简单的方法可以在Clojure中打开和解压缩它 import zlib import json with open data json zlib wb as
  • 无法在 Java/Apache HttpClient 中处理带有垂直/管道栏的 url

    例如 如果我想处理这个网址 post new HttpPost http testurl com lists lprocess action LoadList 401814 1 Java Apache 不允许我这么做 因为它说竖线 是非法的
  • 使用Java绘制维恩图

    我正在尝试根据给定的布尔方程绘制维恩图 例如 a AND b AND c我想在 Android 手机上执行此操作 因此我需要找到一种使用 Java 来执行此操作的方法 我找到了一个完美的小部件 它可以完成我在这方面寻找的一切布尔代数计算器
  • 如何在Java中对对象数组进行字段级别排序以进行等级比较?

    In Java Class StudentProgress String Name String Grade CTOR goes here main class main method StudentProgress arrayofObje
  • 如何处理 StaleElementReferenceException

    我正在为鼠标悬停工作 我想通过使用 for 循环单击每个链接来测试所有链接的工作条件 在我的程序中 迭代进行一次 而对于下一次迭代 它不起作用并显示 StaleElementReferenceException 如果需要 请修改代码 pub
  • JMS 中的 MessageListener 和 Consumer 有什么区别?

    我是新来的JMS 据我了解Consumers能够从队列 主题中挑选消息 那么为什么你需要一个MessageListener因为Consumers会知道他们什么时候收到消息吗 这样的实际用途是什么MessageListener 编辑 来自Me
  • 何时在 hibernate 中使用 DiscriminatorValue 注解

    在 hibernate 中使用 DiscriminatorValue 注释的最佳场景是什么以及何时 这两个链接最能帮助我理解继承概念 http docs oracle com javaee 6 tutorial doc bnbqn html
  • Java 的 PriorityQueue 与最小堆有何不同?

    他们为什么命名PriorityQueue如果你不能插入优先级 它看起来与堆非常相似 有什么区别吗 如果没有区别那为什么叫它PriorityQueue而不是堆 默认的PriorityQueue是用Min Heap实现的 即栈顶元素是堆中最小的
  • HttpClient请求设置属性问题

    我使用这个 HttpClient 库玩了一段时间 几周 我想以某种方式将属性设置为请求 不是参数而是属性 在我的 servlet 中 我想使用 Integer inte Integer request getAttribute obj 我不
  • 检查应用程序是否在 Android Market 上可用

    给定 Android 应用程序 ID 包名称 如何以编程方式检查该应用程序是否在 Android Market 上可用 例如 com rovio angrybirds 可用 而 com random app ibuilt 不可用 我计划从

随机推荐

  • 使用YOLOv5检测大宽高比(细长目标)时无法检测问题的解决方法

    在深度学习的工程中总会遇到许许多多的奇奇怪怪的问题 使人头大 上周五Franpper在使用yolov5 5 0训练时就遇到了这么一个奇怪的问题 在训练过程中labels一直为0 表示没有读进去标签 虽然可以训练 但是是无效训练 因为网络也不
  • 【硬件】对电源模块的梳理(包括DC-DC、LDO等不同芯片应用电路)

    目录 1 DC DC 变换器 ME3116 24V转5V JW5017S 18V转5V CX802 输入电压 4 5 80V 输出电压5V 输出电流1 2A LM2596S ADJ 输入电压3 3 40V 输出电压5V 2 LDO 低压差
  • java中网络编程UDP在线咨询案例(DatagramSocket)

    方法1 单线程 单方向发送接收 发送端 UdpTalkClient java 步骤流程 1 使用DatagramSocket 指定端口 创建发送端 2 准备数据一定转成字节数组 3 封装DatagramSocket包裹 需要指定目的地 4
  • java流程控制语句

    一 顺序结构 顺序结构 按照代码的顺序 自上而下执行 二 选择结构 A if语句 格式 a if 关系表达式 语句体 详细情况 if 关系表达式 如果关系表达式的结果是true 执行大括号中的语句 如果关系表达式的结果是false 就跳过不
  • 北航计算机学院编译技术,北航编译技术在线作业一二三

    北航编译技术在线作业一二三 由会员分享 可在线阅读 更多相关 北航编译技术在线作业一二三 16页珍藏版 请在人人文库网上搜索 1 北航编译技术在线作业一一 单选题 共 14 道试题 共 56 分 1 LR 1 文法都是 C A 无二义性且无
  • CentOS修改默认的root账号名称

    最近云服务器老是提示被爆破 为了安全起见 设置了一下hosts deny 另外还更改了默认的root账号名称 这里记录root账号修改过程 1 修改密码文件中的用户名 vi etc passwd 第一行第一个root字符修改成你想要的用户名
  • 深度学习 多分类roc曲线的绘制

    对于多分类问题 ROC曲线的获取主要有两种方法 假设测试样本个数为m 类别个数为n 在训练完成后 计算出每个测试样本的在各类别下的概率或置信度 得到一个 m n 形状的矩阵P 每一行表示一个测试样本在各类别下概率值 按类别标签排序 相应地
  • 微信企业号接收消息并自动响应

    花了2天时间做了企业号接收消息功能测试 微信官方的文档给了我很大的帮助 但是恰恰卡时间最长的 也是官方文档上的一段有误导性的说明 带我细细道来 首先把微信发送信息到企业号服务器 然后企业号自动响应的过程图示下 网上找的 感觉描述的很好 这里
  • 照片也能跳舞?仅需3秒,这个AI神器让你的照片变3D动画……

    上面的动画好玩么 他原本可不是动画 而是下面这张照片一键生成的 神不神奇 今天介绍的这个工具可以轻松实现这个效果 这个工具叫做LeiaPix Converter 可以帮助用户轻松将普通照片转换为具有运动效果的3D图片 这对于那些想要给照片添
  • 神经网络模型量化

    量化模型 Quantized Model 是一种模型加速 Model Acceleration 方法的总称 包括二值化网络 Binary Network 三值化网络 Ternary Network 深度压缩 Deep Compression
  • 【Java8】Guava——Function

    函数式编程 函数式编程是一种历久弥新的编程范式 比起命令式编程 它更加关注程序的执行结果而不是执行过程 Java 始终是一个面向对象 命令式 的语言 在我们使用函数式编程这种黑魔法之前 需要确认 同样的功能 使用函数式编程来实现 能否在健壮
  • 聊一聊5G定位技术

    从2G到4G 蜂窝网络的定位技术主要有 E CID AoA ToA TDOA等 从2G到4G 蜂窝网络的定位技术主要有 E CID AoA ToA TDOA等 E CID 传统基站分为三个扇区 一个扇区对应一个小区 每扇区通常120度 每个
  • 最优控制(泛函)

    1 一般的泛函就是把函数作为元素来研究的一门学科 泛函分析 举个简单一点的列子 我们以前学的函数是把数字作为基本的元素来研究的 现在更高一个层次 就是元素就是一个函数 比如全体实系数连续函数构成一个集合A 那么这个A中每一个元素就是一个函数
  • MATLAB try catch的使用

    try end try end用于尝试运行一段也许可能出错的代码 try 尝试执行的语句 end 如果E运行出错 跳过并从这里开始运行 try catch end 当程序碰到 a m n 错误后 就会跳转到catch里面的语句 继续执行 有
  • k8s新建pod一直执行creating 的解决方法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 参考书籍 kubernetes权威指南第二版 相关内容 确保kubernete集群搭建成功 1 创建一个myweb rc yaml apiVersion v1 kind R
  • QCustomPlot使用技巧

    QCustomPlot使用技巧 一 一 QCustomPlot坐标轴 一个QCustomPlot里有四个坐标轴 其中xAxis yAxis xAxis2和yAxis2分别表示如图所示的4个方向的坐标轴 xAxis2和yAxis2默认隐藏 可
  • vuecli中使用express和mockjs模拟数据

    首先npm安装express和mockjs npm i express npm i mockjs http mockjs com https expressjs com en 5x api html 之后在package json内添加启动
  • 蓝牙之三-StateMachine

    蓝牙和wifi的管理上都使用到了状态机 该状态机属于分层状态机管理消息 一个状态对应于一个
  • vue3 ref()

    通常我们在获取子组件的数据和方法的操作 解决 ref 对子组件进行数据的获取以及方法的触发 不同 需要在子组件 通过defineExpose进行方法的 数据的 暴露 案例 父组件
  • Swagger 3.0 使用指南

    Swagger 3 0 使用指南 Swagger 官网地址 https swagger io 1 Swagger 是什么 API Developmentfor Everyone Simplify API development for us