Spring Boot 下的Swagger 3.0 与 Swagger 2.0 的详细对比

ops/2025/1/17 20:08:24/

先说结论:

        Swgger 3.0  与Swagger 2.0  区别很大,Swagger3.0用了最新的注释实现更强大的功能,同时使得代码更优雅。

        就个人而言,如果新项目推荐使用Swgger 3.0,对于工具而言新的一定比旧的好;对接于旧项目原有Swagger 2.0版本不变就不要变,因为它作为辅助功能能达到你的需求就可以了(当然我一再声明这只代表我的个人看法,欢迎留言讨论)。

一、Maven配置方面差异

Swagger 2.0

 <!-- swagger -->
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.8.0</version>
</dependency>
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.8.0</version>
</dependency>

Swagger 3.0

<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.3.0</version>
</dependency>

配置application.yml  或者application.properties

application.yml

spring:mvc:pathmatch:matching-strategy: ant_path_matcher

application.properties

spring.mvc.pathmatch.matching-strategy= ant_path_matcher

二、配置类区分

Swagger 2.0

@Configuration
@EnableSwagger2
public class SwaggerConfig {@Beanpublic Docket createRestApi(){// 添加请求参数,我们这里把token作为请求头部参数传入后端ParameterBuilder parameterBuilder = new ParameterBuilder();  
//		List<Parameter> parameters = new ArrayList<Parameter>();
//		parameterBuilder.name("token").description("令牌")
//			.modelRef(new ModelRef("string")).parameterType("header").required(false).build();
//		parameters.add(parameterBuilder.build());
//		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
//				.apis(RequestHandlerSelectors.any()).paths(PathSelectors.any())
//				.build().globalOperationParameters(parameters);return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.any()).paths(PathSelectors.any()).build();}private ApiInfo apiInfo(){
//    	return new ApiInfoBuilder()
//    			.title("Kitty API Doc")
//    			.description("This is a restful api document of Kitty.")
//    			.version("1.0")
//    			.build();return new ApiInfoBuilder().build();}}

Swagger 3.0

@Configuration
public class OpenAPIConfig {/*** 这个方法可以不配置会自动去扫描,但配置了更好,因为扫描有了目标性会更快* 这个方法是创建分组* @return*/@Beanpublic GroupedOpenApi publicApi() {String[] paths = {"/**"};String[] packages = {"com.example.test.controller"};//扫描的路径return GroupedOpenApi.builder().group("public").pathsToMatch(paths).packagesToScan(packages).build();}@Beanpublic OpenAPI openAPI() {return new OpenAPI().info(new Info().title("接口文档标题").description("SpringBoot3 集成 Swagger3接口文档").version("v1")).externalDocs(new ExternalDocumentation().description("项目API文档").url("/"));}
}

三、常注解差异

Swagger2.0 与 Swagger 3.0 的注释对比
注解位置Swagger 2.0Swagger 3.0 
Controller 类@Api@Tag(name="接口名",description="接口描述")
Controller 方法@ApiOperation@Operation(summary =“接口方法描述”)
@ApilmplicitParams@Parameters
Controller 方法上 @Parameters 里@ApiImplicitParam@Parameter(description=“参数描述”)
Controller 方法的参数上@ApiParam@Parameter(description=“参数描述”)
@ApiIgnore@Parameter(hidden = true) 或 @Operation(hidden = true) 或 @Hidden
DTO类上@ApiModel@Schema
DTO属性上@ApiModelProperty

Swagger 2

        controller代码

        DTO

 

Swagger 3

        Controller代码

@RestController
@Tag(name = "TestController",description = "测试接口")
@RequestMapping(value = "/swaggertest")
public class TestController {@Operation(summary = "测试接口",description = "测试接口")@GetMapping(value = "/noHiddenApi")public String noHiddenApi(@Parameter(name = "id",description = "这个ID代表.......") Integer id){return "noHiddenApi";}
}

        DTO代码

@Schema(description = "用户实体类")
public class SysUser {@Schema(description = "用户id")private Integer id;@Schema(description = "用户名")private String username;@Schema(description = "密码")private String password;}

后记

花了近一个小时的时间写这个文章,如果有问题请留言指正,确对您有帮助请点赞收藏,谢谢观看。


http://www.ppmy.cn/ops/150904.html

相关文章

梁山派入门指南2——滴答定时器位带操作按键输入(包括GPIO中断)

梁山派入门指南2——滴答定时器&位带操作&按键输入 1. 滴答定时器1.1 滴答定时器简介1.2 相关寄存器1.3 固件库函数 2. 位带操作2.1 位带操作介绍2.2 位带操作的优势2.3 支持位带操作的内存地址2.4 位带别名区地址的计算方式2.5 位带操作使用示例 3 按键输入3.1 独立按…

目标检测新视野 | YOLO、SSD与Faster R-CNN三大目标检测模型深度对比分析

目录 引言 YOLO系列 网络结构 多尺度检测 损失函数 关键特性 SSD 锚框设计 损失函数 关键特性 Faster R-CNN 区域建议网络&#xff08;RPN&#xff09; 两阶段检测器 损失函数 差异分析 共同特点 基于深度学习 目标框预测 损失函数优化 支持多类别检测 应…

idea上git log面板的使用

文章目录 各种颜色含义具体的文件的颜色标签颜色&#x1f3f7;️ 节点和路线 各种颜色含义 具体的文件的颜色 红色&#xff1a;表示还没有 git add 提交到暂存区绿色&#xff1a;表示已经 git add 过&#xff0c;但是从来没有 commit 过蓝色&#xff1a;表示文件有过改动 标…

C#轻松实现条形码二维码生成及识别

一、前言 大家好&#xff01;我是付工。 今天给大家分享一下&#xff0c;如何基于C#来生成并识别条形码或者二维码。 二、ZXing.Net 实现二维码生成的库有很多&#xff0c;我们这里采用的是http://ZXing.Net。 ZXing是一个开放源码的&#xff0c;用Java实现的多种格式的一…

pytorch小记(六):pytorch中的clone和detach操作:克隆/复制数据 vs 共享相同数据但 与计算图断开联系

pytorch小记&#xff08;六&#xff09;&#xff1a;pytorch中的clone和detach操作&#xff1a;克隆/复制数据 vs 共享相同数据但 与计算图断开联系 1. x.clone()示例&#xff1a; 2. x.detach()示例&#xff1a;使用场景&#xff1a; 3. torch.tensor(x).float()示例&#xff…

MYSQL的第一次作业

目录 前情提要 题目解析 连接并使用数据库 创建employees表 创建orders表 创建invoices表 ​查看建立的表 前情提要 需要下载mysql并进行配置&#xff0c;建议下载8.0.37&#xff0c;详情可见MySQL超详细安装配置教程(亲测有效)_mysql安装教程-CSDN博客 题目解析 …

java进行pdf文件压缩

文章目录 pdf文件压缩 pdf文件压缩 添加依赖 <dependency><groupId>com.luhuiguo</groupId><artifactId>aspose-pdf</artifactId><version>23.1</version> </dependency>public class OptimizePdf {public static void opti…

[Unity] 【图形渲染】Unity Shader光照基础2-标准光照模型

在早期的游戏开发中,游戏引擎大多使用标准光照模型来模拟光线如何与物体表面交互。虽然现代引擎通常会采用更复杂的光照技术,但标准光照模型依然是一个关键概念,特别是在实时渲染中。在本文中,我们将深入探讨Unity标准光照模型的各个组成部分,了解光线如何与物体表面相互作…