当前位置: 首页 > news >正文

springboot 集成 Swagger3(速通)

→ springboot 集成 Swagger2 ←

目录

  • 1. 案例
  • 2. info 配置
  • 3. Docket 配置
    • 1. 开关配置
    • 2. 扫描路径
    • 3. 路径匹配
    • 4. 分组管理
  • 4. 常用注解
    • 1. 说明
    • 2. 案例

1. 案例

这次直接使用 2.5.6 的 spring-boot 。

  1. 依赖:

        <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.6</version><relativePath/> <!-- lookup parent from repository --></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--swagger3--><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency></dependencies>
    
  2. 启动类加注解 @EnableOpenApi

  3. 新建测试类

    @RestController
    @RequestMapping("/test")
    public class SwaggerController {@GetMapping("/get")public String getStr(String str) {return "SELECT " + str;}@PostMapping("/post")public String postStr(String str) {return "CREATE " + str;}@PutMapping("/put")public String putStr(String str) {return "UPDATE " + str;}@NoSwagger@PatchMapping("/patch")public String patchStr(String str) {return "UPDATE " + str;}@DeleteMapping("/delete")public String deleteStr(String str) {return "DELETE " + str;}
    }
    
  4. 访问 http://127.0.0.1:8080/swagger-ui.html ,没错,又是 Error 页面

此部分参考:https://blog.csdn.net/mmmm0584/article/details/117786055


在swagger3.0中,swagger-ui.html的位置发生了变化:
    
所以路径也变了:http://127.0.0.1:8080/swagger-ui.htmlhttp://127.0.0.1:8080/swagger-ui/index.html

  1. 访问 http://127.0.0.1:8080/swagger-ui/index.html

2. info 配置

新建一个配置类:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.VendorExtension;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;import java.util.HashSet;@Configuration
public class Swagger3Conf {@Beanpublic Docket createDocket() {return new Docket(DocumentationType.OAS_30)// 指定 Swagger3 版本号.apiInfo(createApiInfo());}@Beanpublic ApiInfo createApiInfo() {
//        // 写法一
//        return new ApiInfoBuilder()
//                .title("Swagger3 文档案例")
//                .description("Swagger :一套围绕 Open API 规范构建的一款 RESTful 接口的文档在线自动生成和功能测试 API 。")
//                .version("1.0.1")
//                .contact(
//                        // name url email
//                        new Contact("364.99°的文档", // 文档发布者名称
//                                "https://blog.csdn.net/m0_54355172", // 文档发布者的网站地址
//                                "2190826197@qq.com" // 文档发布者的邮箱
//                        )
//                )
//                .build();// 写法二return new ApiInfo("Swagger3 文档案例","Swagger :一套围绕 Open API 规范构建的一款 RESTful 接口的文档在线自动生成和功能测试 API 。","1.0.1","https://blog.csdn.net/m0_54355172",new Contact("364.99°的文档", // 文档发布者名称"https://blog.csdn.net/m0_54355172", // 文档发布者的网站地址"2190826197@qq.com" // 文档发布者的邮箱),"364.99°","https://blog.csdn.net/m0_54355172",new HashSet<>());}
}

  • Docket Swagger 的实例,可通过 Docket 对象来配置 Swagger;
  • ApiInfo 文件描述的配置对象。

3. Docket 配置

1. 开关配置

    @Beanpublic Docket createDocket() {return new Docket(DocumentationType.OAS_30)// 指定 Swagger3 版本号.enable(false)// 关闭文档.apiInfo(createApiInfo());}

注意: 一般只有在测试环境才会用到 Swagger,在生产环境中会把它关闭掉,为了安全与效率。

2. 扫描路径

                .select().apis(RequestHandlerSelectors.basePackage("com.chenjy.swagger2.controller")).build()

3. 路径匹配

新建一个控制器:

@Api(tags = "other 接口 API")
@RestController
@RequestMapping("/other")
public class OtherController {@GetMapping("getInfo")public String getInfo() {return "information";}
}
                .select().paths(PathSelectors.ant("/other/**")).build()

4. 分组管理

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.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;import java.util.HashSet;@Configuration
public class Swagger3Conf {@Beanpublic Docket createDocket01() {return new Docket(DocumentationType.OAS_30)// 指定 Swagger3 版本号.groupName("other 组").enable(true)// 关闭文档.select().paths(PathSelectors.ant("/other/**")).build().apiInfo(createApiInfo());}@Beanpublic Docket createDocket02() {return new Docket(DocumentationType.OAS_30).groupName("test 组").select().apis(RequestHandlerSelectors.basePackage("com.chenjy.swagger2.controller")).build().apiInfo(new ApiInfoBuilder().title("Swagger3 文档案例").build());}@Beanpublic ApiInfo createApiInfo() {
//        // 写法一
//        return new ApiInfoBuilder()
//                .title("Swagger3 文档案例")
//                .description("Swagger :一套围绕 Open API 规范构建的一款 RESTful 接口的文档在线自动生成和功能测试 API 。")
//                .version("1.0.1")
//                .contact(
//                        // name url email
//                        new Contact("364.99°的文档", // 文档发布者名称
//                                "https://blog.csdn.net/m0_54355172", // 文档发布者的网站地址
//                                "2190826197@qq.com" // 文档发布者的邮箱
//                        )
//                )
//                .build();// 写法二return new ApiInfo("Swagger3 文档案例","Swagger :一套围绕 Open API 规范构建的一款 RESTful 接口的文档在线自动生成和功能测试 API 。","1.0.1","https://blog.csdn.net/m0_54355172",new Contact("364.99°的文档", // 文档发布者名称"https://blog.csdn.net/m0_54355172", // 文档发布者的网站地址"2190826197@qq.com" // 文档发布者的邮箱),"364.99°","https://blog.csdn.net/m0_54355172",new HashSet<>());}
}

4. 常用注解

1. 说明

和 Swagger2 一样,其常用注解还是如下几个:

常用注解注解说明常用属性属性说明
@Api类注解,常用来给文档中的控制器取别名tags别名
@ApiOperation方法/类注解,常用来描述方法value
notes
方法说明
方法备注
@ApiParam参数/方法/属性注解,常用来描述参数name
value
required
参数名
补充描述
是否必须
@ApiIgnore方法/属性注解,使被标注方法不生成文档--
@ApiImplicitParam方法注解,描述一个参数name
value
name
required
paramType
dataType
defaultValue
参数名
补充说明

是否必传
参数位置(header、query、path)
参数类型(默认 String)
默认值
@ApiImplicitParams搭配 @ApiImplicitParam 一起使用,描述一组参数
@ApiResponse方法注解,表达一个错误的响应信息code
message
response
整型
字符串
异常信息(默认 String 类型)
@ApiResponses搭配 @ApiResponse 一起使用,参考 @ApiImplicitParams
@ApiModel类注解,当此实体类被作为返回类型用于 API 帮助文档中的接口方法中,此注解被解析value
description
实体类名
补充描述
@ApiModelProperty属性注解,搭配 @ApiModel 使用value
example
hidden
属性名
示例
是否隐藏

2. 案例

import com.chenjy.swagger2.dto.TestDto;
import io.swagger.annotations.*;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;@Api(tags = {"test 接口 API"})
@RestController
public class SwaggerController {@ApiResponses({@ApiResponse(code = 1, message = "查询成功"),@ApiResponse(code = -1, message = "查询失败")})@ApiImplicitParams({@ApiImplicitParam(name = "name", value = "角色名", required = false, defaultValue = "张三"),@ApiImplicitParam(name = "num", value = "序列号", required = true)})@PostMapping("/getInfo")public TestDto getInfo(String name, Integer num) {return new TestDto(name, num);}@ApiIgnore@GetMapping("/getStr")public String getStr(String name) {return name;}
}
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel( value = "角色实体类", description = "存储数据并返回")
public class TestDto {@ApiModelProperty( value = "姓名", example = "张三", hidden = false)private String name;@ApiModelProperty( value = "序列号", example = "1")private Integer num;
}

相关文章:

springboot 集成 Swagger3(速通)

→ springboot 集成 Swagger2 ← 目录 1. 案例2. info 配置3. Docket 配置1. 开关配置2. 扫描路径3. 路径匹配4. 分组管理 4. 常用注解1. 说明2. 案例 1. 案例 这次直接使用 2.5.6 的 spring-boot 。 依赖&#xff1a; <parent><groupId>org.springframework.…...

2023年NOC大赛创客智慧编程赛项图形化复赛模拟题二,包含答案解析

2023年NOC大赛创客智慧编程赛项图形化复赛模拟题二,包含答案解析 第一题: 在源程序“小蝙蝠”文件中,实现小蝙蝠遇到不同的角色会说不同的话,以及切换不同的造型要求: 1:游戏开始时,小蝙蝠角色是造型 a,并能够用键盘控制上、下、左、右移动; 2:移动小蝙蝠,距离角色雪…...

2023年NOC大赛创客智慧编程赛项Python 复赛模拟题(二)

题目来自:NOC 大赛创客智慧编程赛项Python 复赛模拟题(二) NOC大赛创客智慧编程赛项Python 复赛模拟题(二) 第一题: 编写一个成绩评价系统,当输入语文、数学和英语三门课程成绩时,输出三门课程总成绩及其等级。 (1)程序提示用户输入三个数字,数字分别表示语文、数学、…...

【SQL】MySQL的查询语句

文章目录 SELECT语句WHERE子句JOIN语句GROUP BY和HAVINGORDER BYLIMIT其他关键字 MySQL是一种广泛使用的关系型数据库管理系统&#xff0c;它被广泛地应用于各种应用程序和网站。学会使用MySQL的查询语句可以帮助我们更好地管理和分析数据&#xff0c;从而更好地利用数据库中的…...

测试的分类

1 按照开发阶段&#xff08;软件开发周期&#xff09; 单元测试是对软件的组成单元进行测试。其目的是检验软件基本组成单位的正确性。测试的对象是软件设计的最小单位——模块&#xff0c;故又称为模块测试。集成测试是将程序模块采用适当的集成策略组装起来&#xff0c;对系…...

【5.21】六、自动化测试—持续集成测试

目录 6.4 持续集成测试 6.4.1 持续集成的概念 6.4.2 持续集成测试框架设计 6.4 持续集成测试 持续集成&#xff08;Continuous Integration&#xff0c;CI&#xff09;是软件开发DevOps&#xff08;DevelopmentOperations&#xff09;中的一个概念&#xff0c;它强调的是软…...

【C++】 排列与组合算法详解(进阶篇)

文章目录 写在前面算法1&#xff1a;朴素算法思路缺点 算法2&#xff1a;递推预处理思路时间复杂度&#xff1a; O ( n 2 ) O(n^2) O(n2) 算法3&#xff1a;阶乘逆元思路时间复杂度&#xff1a; O ( n log ⁡ n ) O(n \log n) O(nlogn)思考&#xff1a;读者也可以尝试写 O ( n…...

Godot引擎 4.0 文档 - 循序渐进教程 - 监听玩家输入

本文为Google Translate英译中结果&#xff0c;DrGraph在此基础上加了一些校正。英文原版页面&#xff1a; Listening to player input — Godot Engine (stable) documentation in English 监听玩家输入 在上一课创建您的第一个脚本的基础上&#xff0c;让我们看看任何游戏…...

Docker笔记9 | Docker中网络功能知识梳理和了解

9 | Docker中网络功能知识梳理和了解 1 外部访问容器1.1 访问方式1.2 映射所有接口地址1.3 映射到指定地址的指定端口1.4 映射到指定地址的任意端口1.5 查看映射端口配置 2 容器互联2.1 新建网络2.2 连接容器 3 配置DNS 简单说&#xff1a;Docker 允许通过外部访问容器或容器互…...

生态系统模型:SolVES、DNDC、CMIP6、GEE林业、APSIM、InVEST、无人机遥感、ArcGIS Pro模型等

基于R语言APSIM模型高级应用及批量模拟实践技术 CMIP6 数据处理方法与典型案例分析实践技术 Python 与 Noah-MP 陆面过程模型融合技术及在站点、区域模拟实践应用 双碳目标下基于“遥感”融合技术在碳储量、碳收支、碳循环等多领域监测与模拟实践应用 基于Citespace和vosvi…...

常见分布函数。

一维常见分布函数 1.离散型 ① 0 - 1分布 记 X~B(1,p) 如果X的概率分布为 ( 1 0 p 1 − p ) \begin{pmatrix} 1 & 0 \\ p & 1-p \end{pmatrix} (1p​01−p​),则称X服从参数为P的0-1分布&#xff08;0<p<1&#xff09;。 注&#xff1a;0-1分布又称一次伯努利试…...

【网络安全】红队攻防之基础免杀

引言 本文主要介绍“反射型 dll 注入”及“柔性加载”技术。 反射型 dll 注入 为什么需要反射型 dll 注入 常规的 dll 注入代码如下&#xff1a; int main(int argc, char *argv[]) {HANDLE processHandle;PVOID remoteBuffer;wchar_t dllPath[] TEXT("C:\\experimen…...

CTF入门指南

何为CTF &#xff1f; CTF&#xff08;Capture The Flag&#xff09;夺旗比赛&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。…...

C:入门级积累(4)

(int *)malloc(10 * sizeof(int))memory allocate动态分配内存,malloc的出现时为了弥补静态内存分配的缺点&#xff0c;传统数组的长度一旦定义之后&#xff0c;就不能更改&#xff0c;比如说&#xff0c;如果我有一个业务在这之前给分配的大小为100&#xff0c;但是&#xff0…...

基于DBSCAN密度聚类的风电-负荷场景削减方法

​目录 ​ 1 主要内容 基于密度聚类的数据预处理&#xff1a; 场景提取&#xff1a; 算法流程&#xff1a; 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序复现文章《氢能支撑的风-燃气耦合低碳微网容量优化配置研究》第三章内容&#xff0c;实现的是基于DBSCAN…...

服务(第二十七篇)squid-传统、穿透、反向代理

squid代理服务器&#xff1a; 主要提供缓存加速、应用层过滤控制的功能。 代理的工作机制&#xff1a; 1、代替客户机向网站请求数据&#xff0c;从而可以隐藏用户的真实IP地址。 2、将获得的网页数据&#xff08;静态 Web 元素&#xff09;保存到缓存中并发送给客户机&#x…...

golang yaml 解析问题

golang 中解析 yaml 格式内容可以使用 yaml.v3 库来解决。下载 go 依赖 go get -u gopkg.in/yaml.v31. 示例 yaml 数据 config_mail_template:description: 验证码one: Verification Codeother: Verification Codeconfig_mail_template_reset_code:description: 重置密码one:…...

setContentHuggingPriority和setContentCompressionResistancePriority的使用

需求&#xff1a; 两个label并排显示&#xff0c;文字内容由服务器返回&#xff0c;label宽度以文字内容自适应&#xff0c;label之间间距大于等于10. 需要考虑以下情况&#xff1a; 当两个label的宽度和 < 屏幕宽度时&#xff0c;各自设置约束&#xff0c;无需处理&#…...

java springboot yml文件配置 多环境yml

如果是properties改用yml&#xff0c;直接改后缀&#xff0c;原文件中的配置语法改用yml的语法即可&#xff0c;系统会自动扫描application.properties和application.yml文件&#xff08;注意&#xff1a;改了之后需要maven 命令 clean一下&#xff0c;清个缓存&#xff09;。 …...

DMBOK知识梳理for CDGA/CDGP——第一章数据管理(附常考知识点)

第一章 数据管理 第一章在 CDGA|CDGP考试中分值占比均不是很高&#xff0c;主要侧重点是考概念性的知识&#xff0c;理解数据管理的目标原则、还有与其他概念的区别点&#xff0c;同时掌握几个关键核心的图&#xff08;车轮图、六边形图、语境关系图&#xff09;。总体来说难度…...

别再乱采了!FOC电流环调试中,低侧、高侧、在线采样到底怎么选?(附STM32避坑指南)

FOC电流采样方案实战指南&#xff1a;从硬件选型到STM32避坑技巧 在无刷电机控制领域&#xff0c;电流采样方案的选择往往决定了整个FOC&#xff08;磁场定向控制&#xff09;系统的稳定性和开发效率。作为一名长期奋战在电机控制一线的工程师&#xff0c;我见过太多项目因为采…...

5种认知减负策略:2025年macOS效率工具深度测评与工作流优化指南

5种认知减负策略&#xff1a;2025年macOS效率工具深度测评与工作流优化指南 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice 在数字化工作环境中&#xff0c;macOS菜单栏作为系统与用户交互的核心界面…...

如何用TPFanCtrl2解决ThinkPad散热难题:5个智能控制进阶技巧与实战案例

如何用TPFanCtrl2解决ThinkPad散热难题&#xff1a;5个智能控制进阶技巧与实战案例 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 一、重新定义散热控制&#xff1a;T…...

手把手教你用Modbus RTU控制电动夹爪(附完整接线图)

工业自动化实战&#xff1a;Modbus RTU电动夹爪控制全流程解析 在工业自动化领域&#xff0c;电动夹爪作为末端执行器的核心部件&#xff0c;其精准控制直接关系到生产线的稳定性和效率。不同于常见的Modbus TCP协议&#xff0c;Modbus RTU以其接线简单、抗干扰强等特点&#x…...

**发散创新:基于CUDA的GPU加速图像卷积运算实战详解**在现代计算机视觉与深度学习领域,**图像处理

发散创新&#xff1a;基于CUDA的GPU加速图像卷积运算实战详解 在现代计算机视觉与深度学习领域&#xff0c;图像处理任务的性能瓶颈往往集中在CPU端计算效率不足。尤其是在大规模图像数据集上进行卷积操作时&#xff0c;传统串行算法难以满足实时性需求。本文将深入探讨如何利用…...

革新性中国象棋智能辅助系统:全流程视觉识别与实时决策实战指南

革新性中国象棋智能辅助系统&#xff1a;全流程视觉识别与实时决策实战指南 【免费下载链接】VinXiangQi Xiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具 项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi 在数字化对弈场景中&#xff0…...

电机控制新手必看:半桥栅极驱动芯片选型避坑指南(附英飞凌型号推荐)

电机控制新手必看&#xff1a;半桥栅极驱动芯片选型避坑指南&#xff08;附英飞凌型号推荐&#xff09; 在电机控制系统的设计中&#xff0c;半桥栅极驱动芯片的选择往往成为新手工程师的第一个技术挑战。我曾见过不少项目因为驱动芯片选型不当&#xff0c;导致电机运行不稳定…...

GitHub中文界面插件:3步告别英文困扰,让中文开发者效率翻倍

GitHub中文界面插件&#xff1a;3步告别英文困扰&#xff0c;让中文开发者效率翻倍 【免费下载链接】github-chinese GitHub 汉化插件&#xff0c;GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 你…...

一键生成爆炸图:Nano-Banana拆解引擎在产品说明书制作中的应用

一键生成爆炸图&#xff1a;Nano-Banana拆解引擎在产品说明书制作中的应用 1. 产品拆解可视化的行业痛点 在产品说明书、维修手册和教育材料的制作过程中&#xff0c;清晰展示产品内部结构和组件关系是至关重要的。传统方法通常面临三大挑战&#xff1a; 3D建模成本高&#…...

如何在5分钟内搭建专属的Zwift离线训练服务器:完整指南

如何在5分钟内搭建专属的Zwift离线训练服务器&#xff1a;完整指南 【免费下载链接】zwift-offline Use Zwift offline 项目地址: https://gitcode.com/gh_mirrors/zw/zwift-offline 厌倦了网络不稳定导致的虚拟骑行中断&#xff1f;想要在任何地方都能享受流畅的Zwift训…...