手把手教会如何掌握Swagger

news2024/11/26 16:54:30

文章目录

  • 前言
  • 一、Swagger重要组件及作用
  • 二、SpringBoot集成Swagger
    • 1.环境准备
    • 2.配置Swagger
    • 3.配置Swagger扫描接口
    • 4.配置API分组
    • 5.拓展:其他皮肤
  • 三、常用注解
    • 1.接口注解
    • 2.方法及参数注解
    • 3.实体类注解
    • 效果如图: ![在这里插入图片描述](https://img-blog.csdnimg.cn/4b129cc61659480281187fe471191f18.png)
  • 总结


前言

Swagger是一个用于设计、构建、文档化和消费RESTful Web服务的开源工具集。它的主要目标是简化API的开发和维护,同时提供自动生成的交互式API文档。


一、Swagger重要组件及作用

1.SWAGGER官网主要提供了几种开源工具:

  • Swagger Codegen: 通过Codegen可以将描述文件生成html格式和cwiki形式的接口文档,同时也能生成多钟语言的服务端和客户端的代码。支持通过jar包,docker,node等方式在本地化执行生成。也可以在后面的SwaggerEditor中在线生成。
  • Swagger UI:提供了一个可视化的UI页面展示描述文件。接口的调用方、测试、项目经理等都可以在该页面中对相关接口进行查阅和做一些简单的接口请求。该项目支持在线导入描述文件和本地部署UI项目。
  • Swagger Editor:类似于markendown编辑器的编辑Swagger描述文件的编辑器,该编辑支持实时预览描述文件的更新效果。也提供了在线编辑器和本地部署编辑器两种方式。
  • Swagger Inspector: 和postman差不多,是一个可以对接口进行测试的在线版的postman。比在SwaggerUI里面做接口请求,会返回更多的信息,也会保存你请求的实际请求参数等数据。
  • Swagger Hub:集成了上面所有项目的各个功能,你可以以项目和版本为单位,将你的描述文件上传到Swagger Hub中。在Swagger Hub中可以完成上面项目的所有工作,需要注册账号,分免费版和收费版。
  • Springfox Swagger: Spring 基于swagger规范,可以将基于SpringMVC和Spring Boot项目的项目代码,自动生成JSON格式的描述文件。本身不是属于Swagger官网提供的,在这里列出来做个说明,方便后面作一个使用的展开。其实swagger是有两个版本的,区别还挺大的,一个是swagger-ui也就是swagger1;还有一个是springfox-swagger也就是swagger2;

2.Swagger的优点:

  • 自动文档生成: Swagger可以自动生成API文档,减少了手动编写文档的工作量,并保持文档与实际API的同步。
  • 易于使用: Swagger提供了直观的界面,使开发人员能够轻松了解和测试API。
  • 提高开发效率: 自动生成的客户端和服务器端代码可以节省开发时间,减少了潜在的错误。
  • 标准化: Swagger采用标准的OpenAPI规范,有助于在不同的开发团队和工具之间实现互操作性。
  • 支持多种编程语言: Swagger支持多种编程语言和框架,使其适用于各种技术栈的项目。

二、SpringBoot集成Swagger

1.环境准备

1.1添加Maven依赖

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

1.2.编写HelloController,测试确保运行成功

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(){
        return "hello";
    }
}

1.3.编写一个配置类-SwaggerConfig来配置 Swagger

@Configuration
@EnableSwagger2//开启Swagger2的自动配置
public class SwaggerConfig {
}

1.4.访问测试 :http://localhost:8080/swagger-ui.html ,可以看到swagger的界面;

在这里插入图片描述
如果启动报错空指针是因为springboot2.6.0中将SpringMVC 默认路径匹配策略从AntPathMatcher 更改为PathPatternParser,导致出错可以在启动类上加上@EnableWebMvc注解或者在配置中切换为原先的AntPathMatcher:

spring.mvc.pathmatch.matching-strategy=ant_path_matcher

2.配置Swagger

2.1Swagger实例Bean是Docket,所以通过配置Docket实例来配置Swagger

@Bean //配置docket以配置Swagger具体参数
public Docket docket() {
   return new Docket(DocumentationType.SWAGGER_2);
}

2.2.通过apiInfo()属性配置文档信息

//配置文档信息
private ApiInfo apiInfo() {
        Contact contact = new Contact("杨树林", "http://yangshulin.com/联系人访问链接", "yangshulin_emila@163.com");

        return new ApiInfo(
                "Swagger学习", // 标题
                "学习演示如何配置Swagger", // 描述
                "v1.0", // 版本
                "http://apesource.com", // 组织链接
                contact, // 联系人信息
                "Apach 2.0 许可", // 许可
                "许可链接", // 许可连接
                new ArrayList<>()// 扩展
        );
    }

2.3.Docket 实例关联上 apiInfo()

@Bean
public Docket docket() {
   return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
}

2.4.重启项目,访问测试 http://localhost:8080/swagger-ui.html 看下效果;
在这里插入图片描述

3.配置Swagger扫描接口

3.1构建Docket时通过select()方法配置怎么扫描接口

@Bean
public Docket docket() {
   return new Docket(DocumentationType.SWAGGER_2)
      .apiInfo(apiInfo())
      .select()// 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
      .apis(RequestHandlerSelectors.basePackage("com.apesource.swagger.controller"))
      .build();
}

3.2.重启项目测试,由于我们配置根据包的路径扫描接口,所以我们只能看到一个类
在这里插入图片描述
3.3除了通过包路径配置扫描接口外,还可以通过配置其他方式扫描接口,这里注释一下所有的配置方式:

  • any(): 扫描所有,项目中的所有接口都会被扫描到
  • none(): 不扫描接口
  • withMethodAnnotation(final Class<? extends Annotation> annotation):通过方法上的注解扫描,如withMethodAnnotation(GetMapping.class)只扫描get请求
  • withClassAnnotation(final Class<? extends Annotation> annotation):通过方法上的注解扫描,如withMethodAnnotation(GetMapping.class)只扫描get请求

3.4可以配置接口扫描过滤
.paths(PathSelectors.ant(“/apesource/**”))
配置如何通过path过滤,即这里只扫描请求以/apesource开头的接口
除了ant还有一些配置:

  • any() // 任何请求都扫描
  • none() // 任何请求都不扫描
  • regex(final String pathRegex) // 通过正则表达式控制
  • ant(final String antPattern) // 通过ant()控制

4.配置API分组

4.1如果没有配置分组,默认是default。通过groupName()方法即可配置分组

    @Bean
    public Docket docket1(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("group1");
    }

4.2配置多个分组只需要配置多个docket即可:


  @Bean
  public Docket docket1(){
      return new Docket(DocumentationType.SWAGGER_2).groupName("group1");
  }
  @Bean
  public Docket docket2(){
      return new Docket(DocumentationType.SWAGGER_2).groupName("group2");
  }

5.拓展:其他皮肤

我们可以导入不同的包实现不同的皮肤定义:
1.默认的访问 http://localhost:8080/swagger-ui.html:

<dependency>
   <groupId>io.springfox</groupId>
   <artifactId>springfox-swagger-ui</artifactId>
   <version>2.9.2</version>
</dependency>

2.bootstrap-ui 访问 http://localhost:8080/doc.html

<dependency>
   <groupId>com.github.xiaoymin</groupId>
   <artifactId>swagger-bootstrap-ui</artifactId>
   <version>1.9.1</version>
</dependency>

在这里插入图片描述
虽然ui界面不同,但功能是相同!


三、常用注解

swagger通过注解生成接口文档,包括接口名、请求方法、参数、返回信息的等等。

1.接口注解

@Api:修饰整个类,描述Controller的作用
语法:@Api(tags=“说明该类的作用,可以在UI界面上看到的注解”,value = “/类的访问路径”, description = “类的文字描述”)

@RequestMapping("/user")
@Api(tags = "UserController|一个用来测试swagger注解的控制器1",value = "/user")
public class UserController {
}

2.方法及参数注解

在高版主的Swagger中,Swagger会自动帮我们识别简单的参数及请求信息:

  1. @ApiOperation:描述一个类的一个方法,说明方法的作用
    语法:@ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”, response = “接口返回参数类型”, notes = “接口发布说明”)
	@GetMapping(value ="/findByName")
    @ApiOperation(value="根据用户名查询", notes="描述的具体信息可以省略",httpMethod="GET",response = Result.class)
    public Result findByName(@RequestParam String userName){
    }

在这里插入图片描述

  1. @ApiImplicitParam:一个请求参数
    语法:@ApiImplicitParam(required = “是否必须参数”, name = “参数名称”, value = “参数具体描述”,dateType="变量类型”,paramType="请求方式”)

  2. @ApiImplicitParams: 多个请求参数
    @ApiImplicitParams(required = “是否必须参数”, name = “参数名称”, value = “参数具体描述”,dateType="变量类型”,paramType="请求方式”)

  3. @ApiParam:单个参数描述
    语法:@ApiParam(required = “是否必须参数”, name = “参数名称”, value = “参数具体描述”,dateType="变量类型”,paramType="请求方式”)

  4. @ApiParams:多个参数描述
    语法:@ApiParams(required = “是否必须参数”, name = “参数名称”, value = “参数具体描述”,dateType="变量类型”,paramType="请求方式”)

  5. @ApiResponse:HTTP响应其中1个描述,响应配置
    语法:@ApiResponse(code = 400, message = “Invalid user supplied”)

  6. @ApiResponses:HTTP响应整体描述
    语法:@ApiResponses({ @ApiResponse(code = 400, message = “Invalid Order”) })

在这里插入图片描述

3.实体类注解

  1. @ApiModel:用对象实体来作为入参;
  2. @ApiModelProperty:用于描述字段信息;
  3. @ApiProperty:用对象接实体收参数时,描述对象的一个字段;
  4. @ApiIgnore:使用该注解忽略这个API;
  5. @ApiError :发生错误返回的信息。
@ApiModel(value = "控制器方法返回值",description = "自定义结果集")
public class Result {
    @ApiModelProperty(name = "falge",value = "结果集状态",example = "true")
    private boolean falge;//状态
    @ApiModelProperty(name = "message",value = "提示信息",example = "查询成功")
    private String message;//提示信息
    @ApiModelProperty(name = "data",value = "返回数据")
    private Object data;//返回数据

}

效果如图:
在这里插入图片描述

总结

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务使用Swagger,就是把相关的信息存储在它定义的描述文件里面(yml或json格式),再通过维护这个描述文件可以去更新接口文档,以及生成各端代码。而Springfox-swagger,则可以通过扫描代码去生成这个描述文件,连描述文件都不需要再去维护了。所有的信息,都在代码里面了。代码即接口文档,接口文档即代码。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。

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

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

相关文章

面向未来的编程方式,做为开发者,很必要了解一下什么是iVX

面向未来的编程方式&#xff0c;做为开发者&#xff0c;很必要了解一下什么是iVX 一前言二什么是传统低代码平台以及传统平台的局限性和作用1.什么是传统低代码平台2.传统平台的局限性 三为什么程序员和技术管理者不太可能接受“低代码”平台&#xff1f;1.低代码的特征2.为什么…

【C++基础】4. 变量

文章目录 【 1. 变量的定义 】【 2. 变量的声明 】示例 【 3. 左值和右值 】 变量&#xff1a;相当于是程序可操作的数据存储区的名称。在 C 中&#xff0c;有多种变量类型可用于存储不同种类的数据。C 中每个变量都有指定的类型&#xff0c;类型决定了变量存储的大小和布局&am…

Windows server 2012安装IIS的方法

Windows Server 2012是微软公司研发的服务器操作系统&#xff0c;于2012年9月4日发布。 Windows Server 2012可以用于搭建功能强大的网站、应用程序服务器与高度虚拟化的云应用环境&#xff0c;无论是大、中或小型的企业网络&#xff0c;都可以使用Windows Server 2012的管理功…

*** error 65: access violation at 0xFFFFFFF4 : no ‘write‘ permission怎么办

我发现是我的单片机型号设置错了&#xff0c;把debug里面的STM32F103ZET6修改为STM32F103ZE就可以正常运行了

信息检索度量指标(MAP@N, P@N)

我们今天遇到的大多数软件产品都集成了某种形式的搜索功能。我们在谷歌上搜索内容&#xff0c;在YouTube上搜索视频&#xff0c;在亚马逊上搜索产品&#xff0c;在Slack上搜索信息&#xff0c;在Gmail上搜索邮件&#xff0c;在Facebook上搜索人等等。 作为用户&#xff0c;工作…

基于SSM+Vue的网上花店系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

【问题总结】 记 一次dockerFile构建报错

写在前面&#xff0c; 其实是一个比较摸不着脑袋的bug&#xff0c;记录一下解决的过程&#xff0c;作为备忘录 问题留档 1、场景描述 在尝试使用dockefile构建一个tomcat镜像&#xff0c;内容如下&#xff0c;构建正常通过&#xff0c;但是容器启动失败 FROM centos:7 MAINT…

【办公类-18-02】(Python)教师获奖证书批量打印(教师信息、获奖类型,公章)

背景需求&#xff1a; 同事提出给word批量“添加电子公章&#xff08;png图片&#xff09;的需求 解压文件后&#xff0c;发现&#xff1a; 1、每份WORD文件名是一位老师的证书&#xff0c;需要打开每一份word&#xff0c;插入一个空白电子公章png。 2、每个word文件名包含教…

Redis缓存的高并发问题

Redis 做缓存虽减轻了 DBMS 的压力&#xff0c;减小了 RT&#xff0c;但在高并发情况下也是可能会出现各 种问题的。 1 缓存穿透 当用户访问的数据既不在缓存也不在数据库中时&#xff0c;就会导致每个用户查询都会“穿透” 缓存“直抵”数据库。这种情况就称为缓存穿透。一个…

SSL证书系列--又拍云Let’s Encrypt免费DV SSL证书使用教程

原文网址&#xff1a;SSL证书系列--又拍云Let’s Encrypt免费DV SSL证书使用教程_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何使用又拍云部署Let’s Encrypt免费DV SSL证书。 一、了解Let’s Encrypt 了解和关注SSL证书的朋友&#xff0c;似乎没有理由不知道 Let’s Encr…

java八股文面试[数据库]——数据库锁的种类

数据库锁的种类 MySQL数据库由于其自身架构的特点,存在多种数据存储引擎, MySQL中不同的存储引擎支持不同的锁机制。 MyISAM和MEMORY存储引擎采用的表级锁&#xff0c; InnoDB存储引擎既支持行级锁&#xff0c;也支持表级锁&#xff0c;默认情况下采用行级锁。 BDB采用的是页…

开店星小程序上架教程和后台Request failed with status code 500[undefined]问题处理

开店星小程序上架教程和后台Request failed with status code 500[undefined]问题处理 刚刚安装好开店星网站后台之后都会出现这个code 500[undefined]的错误&#xff0c;需要改一下代码。改好了之后就可以正常使用了。如果大家不懂得这样处理的可以私聊我&#xff0c;帮忙处理…

kettle通过java步骤获取汉字首拼

kettle通过java步骤获取汉字首拼 用途描述 一组数据&#xff0c;需要获取汉字首拼后&#xff0c;输出&#xff1b; 实现效果 添加jar包 pinyin4j-2.5.0.jar 自定义常量数据 Java代码 完整代码&#xff1a; import net.sourceforge.pinyin4j.PinyinHelper; import net.sou…

高潮迭起:探寻Twitch上精彩纷呈的电子竞技赛事直播

Twitch是电子竞技赛事的热门直播平台之一,它为全球范围内的电子竞技比赛提供了广泛的覆盖和直播服务。以下是一些在Twitch上直播的电子竞技比赛和赛事的例子: League of Legends (英雄联盟) Twitch广泛直播英雄联盟的各个赛事,包括全球性的锦标赛如英雄联盟全球总决赛(World …

SLAM从入门到精通(基本框架)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 SLAM是机器人的一个分支。广义上来说&#xff0c;机器人还包括了计算机视觉、语音识别、自然语言处理、机械臂控制、运动控制、机器人导航、机器人…

软件架构师 设计和编码

软件架构师 设计和编码 目录概述需求&#xff1a; 设计思路实现思路分析1.设在设计软件架构时&#xff0c;您需要考虑以下方面&#xff1a;2.在编码方面&#xff0c;您需要具有以下技能&#xff1a; 参考资料和推荐阅读 Survive by day and develop by night. talk for import …

如何绘制英语思维导图?偷偷告诉你这个绘制方法

如何绘制英语思维导图&#xff1f;绘制英语思维导图可以帮助我们更好地理清思路&#xff0c;提高学习和工作效率。同时&#xff0c;英语思维导图还可以帮助我们提高英语表达能力和阅读理解能力&#xff0c;让我们更好地掌握英语学习和应用。因此&#xff0c;绘制英语思维导图是…

msvcr120.dll放在哪里?怎么修复msvcr120.dll文件

当您在运行某些应用程序或游戏时遇到“msvcr120.dll缺失”错误时&#xff0c;这可能会影响您的使用体验。msvcr120.dll是Microsoft Visual C Redistributable的一部分&#xff0c;并且它提供了程序运行所需的运行时支持&#xff0c;今天我们来讨论一下msvcr120.dl文件缺失了要怎…

[SSM]MyBatisPlus高级

四、高级篇 4.1主键策略 主键的作用就是唯一标识&#xff0c;我们可以通过这个唯一标识来定位到这条数据。对于表数据中的主键&#xff0c;我们可以自己设计生成规则&#xff0c;生成主键。但是在更多的场景中&#xff0c;没有特殊要求的话&#xff0c;我们每次自己手动生成的…

第 2 章 线性表(线性表的动态分配顺序存储结构实现)

1. 背景说明 线性表(linear Iist)是最常用且最简单的一种数据结构。简言之&#xff0c;一个线性表是 n 个数据元素的有限序列。 至于每个数据元素的具体含义&#xff0c;在不同的情况下各不相同&#xff0c;它可以是一个数或一个符号&#xff0c;也可以是一页书&#xff0c;甚…