Spring Boot 整合 Swagger 教程详解

news2024/10/2 12:33:21

在这里插入图片描述

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:SpringBoot 框架从入门到精通
✨特色专栏:国学周更-心性养成之路
🥭本文内容:Spring Boot 整合 Swagger 教程详解

文章目录

    • 一、关于 Swagger
    • 二、Swagger 的安装
        • `1、下载 Swagger`
        • `2、安装 Swagger`
    • 三、Swagger 的使用
        • `1、编写接口`
        • `2、启用 Swagger`
        • `3、查看接口文档`
    • 四、Swagger 的高级使用
        • `1、描述数据模型`
        • `2、描述枚举类型`
        • `3、描述响应参数`
    • 五、Swagger 的进阶使用
        • `1、配置全局参数`
        • `2、配置安全协议`
        • `3、配置安全上下文`
        • `4、配置忽略参数`
    • 六、总结

在这里插入图片描述

  Spring Boot 是一个基于 Spring 框架的轻量级开源框架,它的出现极大地简化了 Spring 应用的搭建和开发。在开发过程中,接口文档是非常重要的一环,它不仅方便开发者查看和理解接口的功能和参数,还能帮助前后端开发协同工作,提高开发效率。本文将介绍如何在 Spring Boot 中使用 Swagger 来实现接口文档的自动生成。

一、关于 Swagger

  Swagger 是一个 RESTful 接口文档的规范和工具集,它的目标是统一 RESTful 接口文档的格式和规范。在开发过程中,接口文档是非常重要的一环,它不仅方便开发者查看和理解接口的功能和参数,还能帮助前后端开发协同工作,提高开发效率。在 Spring Boot 中,我们可以通过集成 Swagger 来实现接口文档的自动生成。Swagger 通过注解来描述接口,然后根据这些注解自动生成接口文档。

二、Swagger 的安装

1、下载 Swagger

  Swagger 的官方网站是 https://swagger.io/,我们可以在这里下载最新版本的 Swagger。

2、安装 Swagger

  安装 Swagger 非常简单,只需要将下载的 Swagger 解压到指定目录即可。在解压后的目录中,我们可以找到 swagger-ui.html 页面,这个页面就是 Swagger 的 UI 界面。

三、Swagger 的使用

1、编写接口

  在编写接口时,我们需要使用 Swagger 的注解来描述接口信息。常用的注解包括:

  • @Api:用于描述接口的类或接口
  • @ApiOperation:用于描述接口的方法
  • @ApiParam:用于描述接口的参数
  • @ApiModel:用于描述数据模型
  • @ApiModelProperty:用于描述数据模型的属性

  例如,我们编写一个简单的接口:

@RestController
@Api(tags = "用户接口")
public class UserController {
 
    @GetMapping("/user/{id}")
    @ApiOperation(value = "根据 ID 获取用户信息")
    public User getUserById(@ApiParam(value = "用户 ID", required = true) @PathVariable Long id) {
        // 根据 ID 查询用户信息
    }
}

  在上面的代码中,@Api表示该类是一个用户接口,@ApiOperation 表示该方法是获取用户信息的接口,@ApiParam 表示该参数是用户 ID,@PathVariable 表示该参数是路径参数。

2、启用 Swagger

  在 Spring Boot 中,我们可以通过添加 Swagger 相关的依赖来启用 Swagger。
我们可以在 pom.xml 文件中添加以下依赖:

<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>

  在 Spring Boot 中,我们还需要添加配置类来配置 Swagger。配置类的代码如下:

@Configuration
@EnableSwagger2
public class SwaggerConfig {
 
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
                .paths(PathSelectors.any())
                .build()
                .apiInfo(apiInfo());
    }
 
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("接口文档")
                .description("接口文档")
                .version("1.0.0")
                .build();
    }
}

  在上面的代码中,@Configuration 表示该类是一个配置类,@EnableSwagger2 表示启用 Swagger。在 api() 方法中,我们通过 `select() 方法配置扫描的包路径,paths() 方法配置接口的访问路径,apiInfo() 方法配置接口文档的相关信息。

3、查看接口文档

  启动 Spring Boot 应用后,我们可以在浏览器中访问 http://localhost:8080/swagger-ui.html 来查看接口文档。在 Swagger UI 页面中,我们可以看到所有的接口信息,包括接口名称、请求方式、请求路径、请求参数、响应参数等。

四、Swagger 的高级使用

1、描述数据模型

  我们可以使用 @ApiModel@ApiModelProperty 注解来描述数据模型和属性。例如,我们可以编写一个 User 类,并在类上使用 @ApiModel 和

@ApiModelProperty 注解来描述该数据模型:

@ApiModel(description = "用户信息")
public class User {
 
    @ApiModelProperty(value = "用户 ID", example ="1") 
    private Long id;

	@ApiModelProperty(value = "用户名", example = "张三")
	private String username;

	@ApiModelProperty(value = "密码", example = "123456")
	private String password;

	// 省略 getter 和 setter 方法
}

  在上面的代码中,@ApiModel 表示该类是一个数据模型,@ApiModelProperty 表示该属性是数据模型的一个属性,value 属性表示属性的描述,example 属性表示属性的示例值。

2、描述枚举类型

  我们可以使用 @ApiModel@ApiModelProperty 注解来描述枚举类型。例如,我们可以编写一个 Gender 枚举类型,并在枚举值上使用 @ApiModelProperty 注解来描述该枚举值:

@ApiModel(description = "性别") public enum Gender {

@ApiModelProperty(value = "男")
MALE,

@ApiModelProperty(value = "女")
FEMALE;
}

  在上面的代码中,@ApiModel 表示该枚举类型是一个描述性别的枚举类型,@ApiModelProperty 表示该枚举值是描述男性的枚举值或描述女性的枚举值。

3、描述响应参数

  我们可以使用 @ApiResponses@ApiResponse 注解来描述接口的响应参数。例如,我们可以编写一个 getUserById() 方法,并在方法上使用 @ApiResponses 和 @ApiResponse 注解来描述该方法的响应参数:

@GetMapping("/user/{id}")
@ApiOperation(value = "根据 ID 获取用户信息") 
@ApiResponses({ @ApiResponse(code = 200, message = "请求成功", response = User.class), 
@ApiResponse(code = 404, message = "用户不存在") }) 
public User getUserById(@ApiParam(value = "用户 ID", required = true) @PathVariable Long id) 
{ 
	// 根据 ID 查询用户信息 
}

  在上面的代码中,@ApiResponses 表示该方法的响应参数,@ApiResponse 表示该响应参数的描述,code 属性表示响应码,message 属性表示响应消息,response 属性表示响应的数据模型。

五、Swagger 的进阶使用

1、配置全局参数

  我们可以在配置类中使用 globalOperationParameters() 方法来配置全局参数。例如,我们可以配置一个全局的 Authorization 参数,用于授权:

@Configuration
@EnableSwagger2
public class SwaggerConfig {
 
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
                .paths(PathSelectors.any())
                .build()
                .globalOperationParameters(Arrays.asList(
                        new ParameterBuilder()
                                .name("Authorization")
                                .description("授权")
                                .modelRef(new ModelRef("string"))
                                .parameterType("header")
                                .required(false)
                                .build()
                ))
                .apiInfo(apiInfo());
    }
 
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("接口文档")
                .description("接口文档")
                .version("1.0.0")
                .build();
    }
 
}

  在上面的代码中,我们通过 globalOperationParameters() 方法来配置一个全局的 Authorization 参数,用于授权。

2、配置安全协议

  我们可以在配置类中使用 securitySchemes() 方法来配置安全协议。例如,我们可以配置一个 Bearer Token 安全协议:

@Configuration
@EnableSwagger2
public class SwaggerConfig {
 
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
                .paths(PathSelectors.any())
                .build()
                .securitySchemes(Arrays.asList(
                        new ApiKey("Bearer", "Authorization", "header")
                ))
                .apiInfo(apiInfo());
    }
 
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("接口文档")
                .description("接口文档")
                .version("1.0.0")
                .build();
    }
 
}

  在上面的代码中,我们通过 securitySchemes() 方法来配置一个 Bearer Token 安全协议。

3、配置安全上下文

  我们可以在配置类中使用 securityContexts() 方法来配置安全上下文。例如,我们可以配置一个安全上下文,用于在 Swagger UI 中显示认证按钮:

@Configuration
@EnableSwagger2
public class SwaggerConfig {
 
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
                .paths(PathSelectors.any())
                .build()
                .securitySchemes(Arrays.asList(
                        new ApiKey("Bearer", "Authorization", "header")
                ))
                .securityContexts(Collections.singletonList(
                        SecurityContext.builder()
                                .securityReferences(Collections.singletonList(
                                        new SecurityReference("Bearer", new AuthorizationScope[0])
                                ))
                                .build()
                ))
                .apiInfo(apiInfo());
    }
 
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("接口文档")
                .description("接口文档")
                .version("1.0.0")
                .build();
    }
 
}

  在上面的代码中,我们通过 securityContexts() 方法来配置一个安全上下文,用于在 Swagger UI 中显示认证按钮。

4、配置忽略参数

  在接口中,有些参数可能是敏感信息,我们不希望在接口文档中显示。我们可以使用 @ApiIgnore 注解来忽略这些参数。例如,我们可以在 User 类中使用 @ApiIgnore 注解来忽略密码参数:

@ApiModel(description = "用户信息")
public class User {
 
    @ApiModelProperty(value = "用户 ID", example = "1")
    private Long id;
 
    @ApiModelProperty(value = "用户名", example = "张三")
    private String username;
 
    @ApiModelProperty(hidden = true)
    @ApiIgnore
    private String password;
 
    // 省略 getter 和 setter 方法
}

  在上面的代码中,@ApiModelProperty(hidden = true) 表示该参数是隐藏的,@ApiIgnore 表示忽略该参数。

六、总结

  通过集成 Swagger,我们可以方便地生成接口文档,使得前后端开发协同更加高效。在使用 Swagger 时,我们需要注意以下几点:

  • 使用注解来描述接口信息,包括接口名称、请求方式、请求路径、请求参数、响应参数等;
  • 在配置类中配置 Swagger,包括扫描的包路径、接口文档信息、全局参数、安全协议、安全上下文等;
  • 描述数据模型、枚举类型、响应参数等信息,方便开发者查看和理解接口的功能和参数;
  • 在需要时使用 @ApiIgnore 注解来忽略敏感参数的显示。
  • 最后,需要注意的是,Swagger 只是一种规范和工具集,它并不能取代单元测试和集成测试等其他测试方式。在开发过程中,我们需要综合使用各种测试方式,保证软件的质量和稳定性。

  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

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

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

相关文章

小白必看,吐血整理Facebook新手指南(二)

上篇文章咱们讲了关于FB广告的类型&#xff0c;今天咱们再来详细讲下如何设置FB广告、注意事项以及如何借助强大的工具&#xff08;SaleSmartly、ss客服&#xff09;监控广告效果、承接广告流量。话不多说&#xff0c;直接上干货选择你的目标 首先&#xff0c;前往您的广告管理…

虚拟化服务器和普通服务器的区别

随着云计算技术的快速普及&#xff0c;虚拟化技术作为其中的一项核心技术&#xff0c;也越来越受到了企业和个人用户的关注。虚拟化服务器相较于传统的物理服务器&#xff0c;具备更高的灵活性和可扩展性&#xff0c;但同时也存在一些不足之处。那么虚拟化服务器的优缺点有哪些…

[STM32F103C8T6]基于stm32的循迹,跟随,避障智能小车

目录 1.小车驱动主要是通过L9110S模块来驱动电机 motor.c 2.我们可以加入串口控制电机驱动(重写串口接收回调函数&#xff0c;和重定向printf) Uart.c main.c 3.点动功能 uart.c main.c 为什么使用的是HAL_Delay()要设置滴答定时器的中断优先级呢&#xff1f; 4.小车…

如何在 Mac上运行 Windows程序?

在Mac 上运行 Windows的工具 在 Mac 上运行 Windows-无需重启即可在您的 Intel 或 Apple M 系列 Mac 上运行 Windows的工具来了,非常强悍和使用,有需要的朋友可以参考一下。 主要功能 运行快速、操作简单、功能强大的应用程序,无需重启即可在您的 Intel 或 Apple M 系列 M…

基于 VITA57.1 的 2 路 125MSPS AD 采集、2 路 250MSPS DA 回放 FMC 子卡模块

板卡概述 FMC150_V30 是一款基于 VITA57.1 规范的 2 路 125MSPS 采样率 16 位分辨率 AD 采集、2 路 250MSPS 采样率 16 位分辨率 DA 回放 FMC 子卡模块。该模块遵循 VITA57.1 规范&#xff0c;可直接与符合 VITA57.1 规范的 FPGA 载卡配合使用&#xff0c;板卡 ADC 器件采用 AD…

接口自动化两大神器:正则提取器和jsonpath提取器

一、前言 在开展接口测试的过程中&#xff0c;我们会发现很多接口需要依赖前面的接口&#xff0c;需要我们动态从前面的接口返回中提取数据&#xff0c;也就是我们通常说的关联。 关联通俗来讲就是把上一次请求的返回内容中的部分截取出来保存为参数&#xff0c;用来传递给下…

迅为龙芯2K0500全国产开发板

目录 龙芯2K0500处理器 动态电源管理 低功耗技术 产品开发更快捷 全国产设计方案 2K0500核心板 邮票孔连接 丰富接口 高扩展性 系统全开源 品质保障 行业应用 龙芯2K0500处理器 迅为iTOP-LS2K0500开发采用龙芯LS2K0500处理器&#xff0c;基于龙芯自主指令系统&#x…

托福听力专项 // Unit1 Listening for Main Ideas //共5篇conversations

目录 I a history class II a student & a librarian III a student & a professor IV a student & a bookstore clerk I a history class its definition II a student & a librarian (1) The librarian was happy to help and explained to the studen…

软件工程part02-软件需求与需求规约

文章目录课程简介考试大纲软件需求与需求规约2.0 可行性分析2.1 需求概述需求分类2.2 需求工程步骤2.3 需求获取2.4 需求规约2.4.1 逻辑模型和物理模型2.4.2 需求分析过程示意2.4.3 结构化分析模型2.4.4 E-R图是数据建模的基础2.4.5 数据流图2.4.5.3 数据流命名规则2.4.5.6 DFD…

【学习cmake-cookbook/chapter-03/recipe-09/c-example-3.5】

代码&#xff1a;cmake-cookbook/chapter-03/recipe-09/c-example-3.5 at master qijitao/cmake-cookbook GitHub 一、 找不到libzmq。 解决办法&#xff1a; 1、首先尝试安装libzmq-dev&#xff0c;但是安装失败&#xff1a; 2、网上查了一下&#xff0c;Ubuntu 17及更高版本…

《Unity Shader 入门精要》第9章 更复杂的光照

第9章 更复杂的光照 9.1 Unity 的渲染路径 在 Unity 中&#xff0c;渲染路径&#xff08;Rendering Path&#xff09;决定了光照是如何应用到 Unity Shader 中的。 Unity 支持以下几种渲染路径&#xff1a; 前向渲染路径&#xff08;Forward Rendering Path&#xff09;延迟…

D. Orac and Medians(贪心 + 构造)

Problem - D - Codeforces 史莱姆有—系列正整数个2个…., .n个 在一个操作中&#xff0c;Orac可以选择任意子段( ...r]并替换所有值一;个布..&#xff0c;到中位数的值{T;T分.&#xff0c;一打 在这个问题中&#xff0c;对于整数多集s&#xff0c;中位数s等于[产]-其中最小的数…

aosp11/12/13 framework源码开发IDE工具之idegen/aidegen/AIDEGen详细使用

hi,粉丝朋友&#xff1a; 近期又粉丝朋友聊到了如果做aosp系统应用开发&#xff0c;有什么工具或者方式来导入代码可以正常跳转和代码提示等&#xff1f; 更多内容&#xff1a; https://blog.csdn.net/learnframework/article/details/130016893 Android Studio导入系统源码 …

【pycharm】往svn仓库commit过滤文件

目录 一、配置好SVN仓库 二、新建一个changelist 1、找到下方版本控制 2、右击 3、新增一个不提交的changelist&#xff08;这里其实就是忽略的列表&#xff09;将不提交的都放这里 三、将忽略的文件加入不提交的changelist 1、修改一个版本控制文件和新增一个不提交文件…

5G入海, 智慧海洋从此“联通”!

湛江&#xff0c;位于中国大陆的最南端&#xff0c;是一座向海而生的城市。近年来&#xff0c;中国联通在湛江打造智慧渔船管理平台&#xff0c;通过专用系统监控平台、岸基子系统、船载子系统三大平台实现九大核心功能&#xff0c;守卫1200多公里的大陆海岸线&#xff0c;赋能…

SpringMVC 请求与响应

一、请求映射路径 1.1、环境准备 创建一个Web的Maven项目并在pom文件中添加依赖 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-ins…

pwnable_orw-seccomp沙箱

1&#xff0c;三连 2&#xff0c;IDA静态分析 知识点引入&#xff1a; seccomp 是 secure computing 的缩写&#xff0c;其是 Linux kernel 从2.6.23版本引入的一种简洁的 sandboxing 机制。在 Linux 系统里&#xff0c;大量的系统调用&#xff08;system call&#xff09;直…

基于springboot+mybatis的图书购物网站

目录一. &#x1f981; 前言1.1 研究目的和意义1.2 所做的主要工作二. &#x1f981; 技术介绍2.1 B/S结构2.2 MySQL 介绍2.3 Java介绍2.4 Spring boot 框架及特点2.5 Mybatis框架特点三. &#x1f981; 系统功能结构1.1 用户管理功能1.2 管理员管理功能四. &#x1f981; 系统…

ppt文件太大怎么压缩变小,4个方法快速学

ppt文件太大怎么压缩变小&#xff1f;现在都流行线上教学&#xff0c;很多教学的课件都是使用PPT 进行的。但是这些PPT体积往往都非常的大&#xff0c;如果是那种使用时间较长的电脑光是打开这类PPT就非常卡顿了。有的甚至就无法打开这些PPT&#xff0c;或者说打开这些ppt文件但…

智慧工地火焰烟火识别检测系统 opencv

智慧工地火焰烟火识别检测系统通过pythonopencv网络模型算法分析技术&#xff0c;智慧工地火焰烟火识别检测算法模型实现对现场画面中火焰烟雾进行7*24小时不间断识别&#xff0c;实时分析自动报警Python是一种由Guido van Rossum开发的通用编程语言&#xff0c;它很快就变得非…