SpringBoot教程(十七) | SpringBoot集成swagger

SpringBoot教程(十七) | SpringBoot集成swagger

  • 一、Swagger的简述
  • 二、SpringBoot集成swagger2
    • 1. 引入依赖
    • 2. 新建SwaggerConfig配置类
      • 当 SpringBoot为2.6.x及以上时 需要注意
    • 3.配置Swagger开关
    • 4. 给Controller 添加注解(正式使用)
    • 5. SpringSecurity中配置 (看需求使用)
  • 三、SpringBoot集成swagger3

一、Swagger的简述

Swagger(现在更广泛地被称为OpenAPI)是一套基于OpenAPI规范构建的开源工具,它主要用于生成、描述、调用和可视化RESTful风格的Web服务。
其中最重要的表现在于实时接口文档,可以更好的让前端进行联调

二、SpringBoot集成swagger2

1. 引入依赖

首先,你需要在项目的pom.xml文件中添加Swagger2的依赖。

<dependencies>  <!-- Swagger2 -->  <dependency>  <groupId>io.springfox</groupId>  <artifactId>springfox-swagger2</artifactId>  <!-- 注意:这里使用的是2.9.2版本 用的人比较多 -->  <version>2.9.2</version> </dependency>  <dependency>  <groupId>io.springfox</groupId>  <artifactId>springfox-swagger-ui</artifactId>  <!-- 与swagger2版本保持一致 -->  <version>2.9.2</version> </dependency>  
</dependencies>

2. 新建SwaggerConfig配置类

@EnableSwagger2

@Configuration  
@EnableSwagger2  
public class SwaggerConfig {  @Bean  public Docket docket() {  return new Docket(DocumentationType.SWAGGER_2)  .select()  //通过包路径来指定哪些Controller中的API需要被Swagger扫描并生成文档。//这里指定了"com.yourcompany.yourproject.controller"包及其子包中的所有Controller。.apis(RequestHandlerSelectors.basePackage("com.yourcompany.yourproject.controller"))  //扫描所有路径  .paths(PathSelectors.any()) .build()  //设置API的元数据信息,如标题、描述、版本等。//这些信息会显示在Swagger UI的顶部。   .apiInfo(apiInfo());}  private ApiInfo apiInfo() {  return new ApiInfoBuilder()  .title("你的项目名称")  .description("项目的API描述")  .version("1.0")  .build();  }  
}

如果你只想包含特定路径的API,可以使用其他PathSelectors方法,
如antPath(“/user/**”)来匹配所有以"/user/"开头的路径。

可以把 .paths(PathSelectors.any())  换成 .paths(PathSelectors.antPath("/user/**"))

当 SpringBoot为2.6.x及以上时 需要注意

由于SpringBoot 2.6.x及以上版本使用了新的路径匹配策略(PathPatternMatcher),
而Swagger(尤其是Springfox-swagger2)通常使用的是AntPathMatcher,
这可能会导致两者之间的不兼容问题。

在application.properties或application.yml文件中,
可以将SpringBoot的默认路径匹配策略更改为AntPathMatcher,以解决与Swagger的兼容性问题。
配置示例如下:

properties写法如下

spring.mvc.pathmatch.matching-strategy=ant_path_matcher

或者在application.yml中:

spring:  mvc:  pathmatch:  matching-strategy: ant_path_matcher

3.配置Swagger开关

可以在application.properties或application.yml文件中定义不同的环境配置,
然后在Swagger配置类中根据当前激活的Profile来决定是否启用Swagger。

application.yml示例

spring:  profiles: #指定激活 active: dev  --- 
#测试环境 
spring:  config:  activate:  on-profile: dev  
swagger:  enabled: true  ---  
#开发环境
spring:  config:  activate:  on-profile: prod  
swagger:  enabled: false
@Configuration  
@EnableSwagger2  
public class SwaggerConfig {  // 使用@Value注解读取配置文件中的swagger.enabled值  @Value("${swagger.enabled:false}")  private Boolean swaggerShow;  @Bean  public Docket docket() {  return new Docket(DocumentationType.SWAGGER_2)  .enable(swaggerShow).select()  // 通过包路径来指定哪些Controller中的API需要被Swagger扫描并生成文档  .apis(RequestHandlerSelectors.basePackage("com.yourcompany.yourproject.controller"))  // 扫描所有路径  .paths(PathSelectors.any())  .build()  // 设置API的元数据信息  .apiInfo(apiInfo());   }  private ApiInfo apiInfo() {  return new ApiInfoBuilder()  .title("你的项目名称")  .description("项目的API描述")  .version("1.0")  .build();  }  
}

4. 给Controller 添加注解(正式使用)

import com.mcy.springbootswagger.User.User;
import com.mcy.springbootswagger.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/user")
//说明接口文件
@Api(value = "测试接口", tags = "用户管理相关的接口", description = "用户测试接口")
public class UserController {@Autowiredprivate UserService userService;/*** 保存数据* @param user* @return*/@PostMapping(value = "/save")//方法参数说明,name参数名;value参数说明,备注;dataType参数类型;required 是否必传;defaultValue 默认值@ApiImplicitParam(name = "user", value = "新增用户数据")//说明是什么方法(可以理解为方法注释)@ApiOperation(value = "添加用户", notes = "添加用户")public String saveUser(User user){userService.save(user);return "保存成功";}/*** 根据id查询用户* @param id* @return*/@GetMapping(value = "findById")@ApiOperation(value = "根据id获取用户信息", notes = "根据id查询用户信息")public User getUser(Integer id){return userService.findById(id);}@DeleteMapping(value = "deleteById")@ApiOperation(value = "根据id删除数据", notes = "删除用户")public String delete(Integer id){userService.deleteById(id);return "删除成功";}
}

运行项目,输入http://localhost:8080/swagger-ui.html访问Swagger页面,页面如下:

由于我们只给用户接口添加了注解,所有用户接口是可以直接观察中文文档的。

在这里插入图片描述
在这里插入图片描述

  • 点击需要测试的接口方法后,
    可以看到接口需要的参数,请求地址及接口说明信息。
    点击右上角的Try it out即可对接口进行测试。
    在这里插入图片描述
    在这里插入图片描述
  • 查询结果:
    在这里插入图片描述
    这里这些了部分接口进行测试,可以根据项目需求自行添加其他接口。

5. SpringSecurity中配置 (看需求使用)

如果Spring Boot项目中集成了Spring Security,接口会被拦截,需要在Spring Security的配置类中重写configure方法,对接口进行过滤一下。代码如下:

@Override
public void configure(WebSecurity web) throws Exception {web.ignoring().antMatchers("/swagger-ui.html").antMatchers("/v2/**").antMatchers("/swagger-resources/**");
}

三、SpringBoot集成swagger3

参考文章
【1】SpringBoot之整合Swagger2(完整版)
【2】SpringBoot整合Swagger2(完整版)
【3】SpringBoot教程(十六) | SpringBoot集成swagger(全网最全)
【4】springboot 2.7版本整合swagger2代码实现
【5】【Swagger】maven项目整合Swagger(含Springfox3.0与spring boot 2.6.0及以上版本冲突解决办法)
【6】一篇搞定SpringBoot任意版本集成Swagger各种版本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3269376.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Radxa ROCK 5B+开发板基本配置和上手测试

目录 1.ROCK 5B Plus开发板是什么&#xff1f;2.烧录官方系统3.设置ROOT用户4.开发板温度情况5.VNC远程桌面配置6.WIFI模块测速7.M2接口使用注意8.总结 1.ROCK 5B Plus开发板是什么&#xff1f; ROCK 5B&#xff08;即ROCK 5B Plus&#xff0c;本文用ROCK 5B指代&#xff09; …

AMQP-核心概念-4

本文参考以下链接摘录翻译&#xff1a; https://www.rabbitmq.com/tutorials/amqp-concepts 绑定 (Bindings) 绑定是交换机用来将消息路由到队列的规则。为了让一个交换机E将消息路由到队列Q&#xff0c;Q必须绑定到E。绑定可以有一个可选属性routing key&#xff0c;有一些类…

VTX326蓝牙TTS语音合成芯片赋能电子称重一体机人机交互新革新

引言 随着科技的飞速发展&#xff0c;零售业正经历着前所未有的变革。北京宇音天下科技有限公司&#xff0c;作为行业的领跑者&#xff0c;推出了革命性的VTX326蓝牙TTS语音合成芯片&#xff0c;为超市、水果店、熟食店、麻辣烫店等零售业态带来了智能化的全新体验。 市场与趋…

【C语言】文件操作详解!!!

目录 为什么要使用文件&#xff1f; 文件概念 1. 什么是文件&#xff1f; 2. 程序文件 3. 数据文件 4. 文件名 文件的使用 1. 文件指针 2. 文件的打开与关闭 文件的顺序读写 1. 顺序读写函数 2. scanf系列与printf系列 文件的随机读写 1. fseek 2. ftell 3. …

数据结构第二讲:顺序表

数据结构第二讲&#xff1a;顺序表 1.线性表2.什么是顺序表3. 静态顺序表4.动态顺序表4.1顺序表基础4.2顺序表的初始化4.3顺序表的销毁4.4顺序表的尾插4.5顺序表的头插4.6顺序表的尾删4.7顺序表的头删4.8顺序表在指定位置之前插入数据4.9顺序表删除指定位置的数据4.10顺序表查找…

京东发行稳定币的背后

加密市场很热&#xff0c;京东也要来分一杯羹&#xff1f; 7月24日&#xff0c;据财联社报道&#xff0c;京东科技旗下的京东币链科技 ( 香港 ) 将在香港发行与港元 1:1锚定的加密货币稳定币&#xff0c;在市场上掀起广泛热议。 由于众所周知的监管原因&#xff0c;国内大厂在早…

深度学习的前沿主题:GANs、自监督学习和Transformer模型

&#x1f48e; 欢迎大家互三&#xff1a;2的n次方_ &#x1f48e;1. 介绍 深度学习在人工智能领域中占据了重要地位&#xff0c;特别是生成对抗网络&#xff08;GANs&#xff09;、自监督学习和Transformer模型的出现&#xff0c;推动了图像生成、自然语言处理等多个领域的创…

【苍穹】完美解决由于nginx更换端口号导致无法使用Websocket

一、报错信息 进行到websocket开发的过程中&#xff0c;遇到了前端报错&#xff0c;无法连接的提示&#xff1a; 经过F12排查很明显是服务端和客户端并没有连接成功。这里就涉及到之前的坑&#xff0c;现在需要填上了。 二、报错原因和推导 应该还记得刚开苍穹的第一天配置前…

2024年第四届网络通信与信息安全国际学术会议(ICNCIS 2024,8月23-25)

2024年第四届网络通信与信息安全国际学术会议&#xff08;ICNCIS2024&#xff09;将于2024年8月23-25日于杭州召开。 会议围绕网络通信在信息安全领域中的最新研究成果&#xff0c;为来自国内外高等院校、科学研究所、企事业单位的专家、教授、学者、工程师等提供一个分享专业经…

移植QT项目出现无法找到 v143 的生成工具(平台工具集 =“v143”)。若要使用 v143 生成工具进行生成,请安装 v143 生成工具。

由于使用的是visual studio2019&#xff0c;在扩展里没找到msvc v143的工具集&#xff0c;这时候可能需要升级下版本&#xff0c;比如换用visual studio2022 或者在三个地方更改所使用的工具集&#xff0c;一般来讲只要v143编译能通过的v142编译也能通过&#xff0c;所以换用v…

数据结构 —— B+树和B*树及MySQL底层引擎

数据结构 —— B树和B*树及MySQL底层引擎 B树B*树B树的应用B树在MySQL中的应用MyISAMInnoDB 我们之前学习了B树的基本原理&#xff0c;今天我们来看看B树的一些改良版本——B树和B*树。如果还没有了解过的小伙伴可以点击这里&#xff1a; https://blog.csdn.net/qq_67693066/ar…

Navicat premium最新【16/17 版本】安装下载教程,图文步骤详解(超简单,一步到位,免费下载领取)

文章目录 软件介绍软件下载安装步骤激活步骤 软件介绍 Navicat是一款快速、可靠且功能全面的数据库管理工具&#xff0c;专为简化数据库的管理及降低系统管理成本而设计。以下是对Navicat的详细介绍&#xff1a; 一、产品概述 开发目的&#xff1a;Navicat旨在通过其直观和设计…

景联文科技入选艾瑞咨询《2024年中国AI基础数据服务产业图谱》

2024年7月&#xff0c;国内领先的数据服务提供商景联文科技&#xff0c;成功入选艾瑞咨询发布的《2024年中国AI基础数据服务产业图谱》&#xff0c;这一荣誉不仅是对景联文科技在AI数据服务领域卓越成就的认可&#xff0c;也是对公司在未来发展中持续引领行业创新的高度期待。 …

map和set的底层结构——AVL树

前面对map和set做了简单的介绍&#xff0c;这几个的个共同特点就是其底层都是用二叉搜索树来写的&#xff0c;但是二叉搜索树有自身的缺陷&#xff0c;如果树中插入的元素有序或接近有序&#xff0c;二叉搜索树就会退化成单支树&#xff0c;时间复杂度变成O(N),所以map和set等关…

全球“微软蓝屏”事件:IT基础设施韧性与安全性的考验

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

postman请求响应加解密

部分接口&#xff0c;需要请求加密后&#xff0c;在发动到后端。同时后端返回的响应内容&#xff0c;也是经过了加密。此时&#xff0c;我们先和开发获取到对应的【密钥】&#xff0c;然后在postman的预执行、后执行加入js脚本对明文请求进行加密&#xff0c;然后在发送请求&am…

Sentinel 入门与实战

一、Sentinel概念 1.1 什么是Sentinel Spring Cloud Alibaba Sentinel 是一个开源的流量控制和熔断框架&#xff0c;它是 Alibaba 开源的微服务框架 Spring Cloud Alibaba 中的一个组件。Sentinel 旨在解决分布式系统中的流量控制和熔断问题&#xff0c;帮助开发人员保护微服…

Power App学习笔记以及基础项目管理demo

Power App学习笔记以及基础项目管理demo 最近学习了一点Power App&#xff0c;感觉挺有意思。配置式组件开发。浅浅记录一下自己实现的项目管理系统&#xff08;即Excel数据的增删改查&#xff09;关于函数的一点皮毛认识。 效果图 筛选数据 编辑 详情 数据源 PowerApp 网…

流量录制与回放:jvm-sandbox-repeater工具详解

在软件开发和测试过程中&#xff0c;流量录制与回放是一个非常重要的环节&#xff0c;它可以帮助开发者验证系统在特定条件下的行为是否符合预期。本文将详细介绍一款强大的流量录制回放工具——jvm-sandbox-repeater&#xff0c;以及如何利用它来提高软件测试的效率和质量。 …

如何在Selenium Webdriver中点击SVG元素?

我们将在URL上单击下面突出显示的SVG元素&#xff1a;https&#xff1a;//testkru.com/Elements/SVGelemnts。 有几种方法可以点击SVG元素&#xff0c;我们将在这篇文章中讨论它们&#xff0c;并讨论它们之间应该首选哪一种。 使用 WebElement Click() 通过使用Action Click() …