Swagger快速上手

  • 快速开始:
  1. 导入maven包
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.7.0</version>
</dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.7.0</version>
</dependency>
  1. 在启动类配置
# 主启动类
@EnableSwagger2

1. Swagger简介

1、前后端分离:

  • Vue + Springboot 开发模式
  • 后端时代:前端只用管理静态页面;html—>后端。模板引擎 JSP—>后端是主力

2、前后端分离时代:

  • 前端 :前端控制层、视图层【前端团队】
  • 后端:后端控制层、服务层、数据访问层【后端团队】
  • 前后端通过API进行交互【交互方式】
  • 前后端相对独立且松耦合;
  • 前后端甚至可以部署在不同的服务器上

3、产生的问题:

  • 前后端集成,前端或者后端无法做到“及时协商,尽早解决”,最终导致问题集中爆发

4、解决方案

  • 首先定义schema [ 计划的提纲 ],并实时跟踪最新的API,降低集成风险
  • 早些年:指定word计划文档
  • 前后端分离:
    • 前端测试后端接口:postman
    • 后端提供接口,需要实施更新最新的消息及改动!

5、Swagger诞生

  • 号称世界上最流行的API框架
  • Restful Api 文档在线自动生成器 => API 文档 与API 定义同步更新
  • 直接运行,在线测试API
  • 支持多种语言 (如:Java,PHP等)
  • 官网:https://swagger.io/

2. 第一个Swagger程序

1、前期准备

SpringBoot集成Swagger => springfox,两个jar包

  • Springfox-swagger2
  • swagger-springmvc
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version>
</dependency>

2、项目测试

  1. 创建一个普通的SpringBoot项目,支持web应用
  2. 添加Maven依赖
  3. 编写HelloController,测试确保运行成功!
package com.koko.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@RequestMapping("/hello")public String toHello(){return "hello";}}
  1. SwaggerConfig配置类
package com.koko.config;import org.springframework.context.annotation.Configuration;
import springfox.documentation.swagger2.annotations.EnableSwagger2;@Configuration //配置类
@EnableSwagger2// 开启Swagger2的自动配置
public class SwaggerConfig {}
  1. 测试:http://localhost:8080/swagger-ui.html

  • 测试成功!
  • 注意:报错的话更改 spring-boot-starter-parent 版本
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.6</version><relativePath/> <!-- lookup parent from repository -->
</parent>

3. Swagger的配置

3.1 配置基本页面

  1. SwaggerConfig配置类中
  • Swagger实例Bean是Docket,所以通过配置Docket实例来配置Swaggger
  • Docket 实例关联上 apiInfo()
@Bean
public Docket docket() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
}
  • 可以通过apiInfo()属性配置文档信息
//配置文档信息
private ApiInfo apiInfo() {Contact contact = new Contact("koko", "http://xxx.xxx.com/联系人访问链接", "联系人邮箱");return new ApiInfo("Swagger学习", // 标题"学习演示如何配置Swagger", // 描述"v1.0", // 版本"http://terms.service.url/组织链接", // 组织链接contact, // 联系人信息"Apach 2.0 许可", // 许可"许可链接", // 许可连接new ArrayList<>()// 扩展);
}
  1. 测试,访问http://localhost:8080/swagger-ui.html

3.2 配置扫描接口

  1. SwaggerConfig配置类
@Bean
public Docket docket() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())//enable设置是否启动Swagger.enable(false)//通过.select()方法,去配置扫描接口.select()//RequestHandlerSelectors配置如何扫描接口.apis(RequestHandlerSelectors.basePackage("com.koko.controller"))// 配置如何通过path过滤,即这里只扫描请求以/koko开头的接口.paths(PathSelectors.ant("/koko/**")).build();
}
  • RequestHandlerSelectors配置的一些方法
any() // 扫描所有,项目中的所有接口都会被扫描到
none() // 不扫描接口
// 通过方法上的注解扫描,如withMethodAnnotation(GetMapping.class)只扫描get请求
withMethodAnnotation(final Class<? extends Annotation> annotation)
// 通过类上的注解扫描,如.withClassAnnotation(Controller.class)只扫描有controller注解的类中的接口
withClassAnnotation(final Class<? extends Annotation> annotation)
basePackage(final String basePackage) // 根据包路径扫描接口
  • PathSelectors配置的一些方法
any() // 任何请求都扫描
none() // 任何请求都不扫描
regex(final String pathRegex) // 通过正则表达式控制
ant(final String antPattern) // 通过ant()控制

3.3 配置Swagger开关

  1. SwaggerConfig配置类中
@Bean
public Docket docket(Environment environment) {// 设置要显示swagger的环境Profiles of = Profiles.of("dev", "test");// 判断当前是否处于该环境// 通过 enable() 接收此参数判断是否要显示boolean b = environment.acceptsProfiles(of);return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())//enable设置是否启动Swagger.enable(b)//通过.select()方法,去配置扫描接口.select()//RequestHandlerSelectors配置如何扫描接口.apis(RequestHandlerSelectors.basePackage("com.koko.controller"))// 配置如何通过path过滤,即这里只扫描请求以/koko开头的接口.paths(PathSelectors.ant("/koko/**")).build();
}
  • 通过enable()方法配置是否启用swagger,如果是false,swagger将不能在浏览器中访问了
  • 如何动态配置当项目处于test、dev环境时显示swagger,处于prod时不显示?
  1. 设置配置文件
  • application.properties
spring.profiles.active=dev
  • application-dev.properties(开发环境)
server.port=8081
  • application-pro.properties(发布环境)
server.port=8082
  1. 测试
  • 访问http://localhost:8081/swagger-ui.html时:(开发环境)——>页面正常显示
  • 访问http://localhost:8082/swagger-ui.html时:——>无法访问!!!实现环境改变的功能!!!

3.4 配置API分组

1、实现步骤

  1. 在SwaggerConfig配置类的docket方法中
  • 如果没有配置分组,默认是default。通过groupName()方法即可配置分组
@Bean
public Docket docket(Environment environment) {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).groupName("hello") // 配置分组// 省略配置....
}
  1. 配置多个分组方法:
  • 配置多个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");
}
@Bean
public Docket docket3(){return new Docket(DocumentationType.SWAGGER_2).groupName("group3");
}
  1. 测试:http://localhost:8081/swagger-ui.html

3.5 常见注解

1、注解的简单说明

  • Swagger的所有注解定义在io.swagger.annotations包下(下面是常见的)
    | Swagger注解 | 简单说明 |
    | — | — |
    | [@Api(tags ](/Api(tags )
    = “xxx模块说明”) | 作用在模块类上 |
    | @ApiOperation(“xxx接口说明”) | 作用在接口方法上 |
    | @ApiModel(“xxxPOJO说明”) | 作用在模型类上:如VO、BO |
    | [@ApiModelProperty(value ](/ApiModelProperty(value )
    = “xxx属性说明”,hidden = true) | 作用在类方法和属性上,hidden设置为true可以隐藏该属性 |
    | @ApiParam(“xxx参数说明”) | 作用在参数、方法和字段上,类似@ApiModelProperty |

2、举例讲解上述五个注解

  • 以注释了序号,可以和上述表对应!
  1. HelloController页面控制跳转类
package com.koko.controller;import com.koko.pojo.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;@Api(tags = "1、模块类")
@RestController
public class HelloController {@GetMapping("/hello")public String hello(){return "hello";}@PostMapping("/user")public User user(){return new User();}@ApiOperation("2、接口方法")@GetMapping("/hello02")public String toHello02(@ApiParam("5、接口中的参数、方法和字段") String username){return "hello" + username;}}
  1. User实体类
package com.koko.pojo;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;@ApiModel("3、模型类(实体类)")
public class User {@ApiModelProperty("4、属性-用户名")public String username;@ApiModelProperty("4、属性-密码")public String password;}
  1. 测试

  • 在模块类中

  • 在实体类模型中

拓展:皮肤

  1. 默认的  **访问 **http://localhost:8080/swagger-ui.html
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version>
</dependency>

  1. bootstrap-ui  **访问 **http://localhost:8080/doc.html
<!-- 引入swagger-bootstrap-ui包 /doc.html-->
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>swagger-bootstrap-ui</artifactId><version>1.9.1</version>
</dependency>

  1. Layui-ui  **访问 **http://localhost:8080/docs.html
<!-- 引入swagger-ui-layer包 /docs.html-->
<dependency><groupId>com.github.caspar-chen</groupId><artifactId>swagger-ui-layer</artifactId><version>1.1.3</version>
</dependency>

  1. mg-ui  **访问 **http://localhost:8080/document.html
<!-- 引入swagger-ui-layer包 /document.html-->
<dependency><groupId>com.zyplayer</groupId><artifactId>swagger-mg-ui</artifactId><version>1.0.6</version>
</dependency>

总结

  1. 我们可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息
  2. 接口文档要实时更新
  3. 可以在线测试

Swagger是一个优秀的工具,几乎所有大公司都有使用它!
【注意点】在正式发布的时候,关闭Swagger!!!处于安全考虑,也同时节省运行内存!!!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深拷贝、浅拷贝 react的“不可变值”

知识获取源–晨哥&#xff08;现实中的人 嘿嘿&#xff09; react中如果你想让一个值始终不变 或者说其他操作不影响该值 它只是作用初始化的时候 使用了浅拷贝–改变了初始值 会改变初始值(selectList1) 都指向同一个地址 const selectList1 { title: 大大, value: 1 };con…

编辑器Sublime text 常用快捷命令 列模式 替换空行

平替notepad 下载可取官网 www.sublimetext.com 据说可以无限试用&#xff0c;没有功能限制 1、快速删除空行 ctrl h选择正则表达式 .*Find输入&#xff1a; ^(\t)*$\nReplace输入&#xff1a;点击Replace All 2、快速选择指定字符 用鼠标选中alt f3修改 3、列编辑模式 ct…

lv13 交叉开发环境搭建

1 ubuntu网络环境配置 目的&#xff1a;让Ubuntu可以上外网&#xff0c;让开发板可以与ubuntu互通 2 tftp 服务器环境搭建 tftp&#xff08;Trivial File Transfer Protocol&#xff09;即简单文件传输协议 是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件 传输…

Axure->Axure安装,Axure菜单栏和工具栏功能介绍,页面及概要区

Axure安装Axure菜单栏和工具栏功能介绍&#xff0c;页面及概要区 1.Axure安装 即时设计 - 可实时协作的专业 UI 设计工具 (js.design) 点击上方下载安装⬆ 打开软件点击帮助->管理授权-> 被授权人 Axure 授权密钥:gjqpIxSSUUqFwPoZPi8XwBBhRE2VNmOQsrord0JqShk4QCXxrw6…

Postman高级应用——变量、流程控制、调试、公共函数、外部数据文件

Postman 提供了四种类型的变量 环境变量&#xff08;Environment Variable&#xff09; 不同的环境&#xff0c;使用不同的环境变量&#xff0c;例如&#xff1a;测试过程中经常会用到 测试环境&#xff0c;外网环境等 全局变量&#xff08;Global Variable&#xff09; 所有的…

arcgis for js 添加自定义叠加图片到地图坐标点上

在使用arcgis for js开发地图绘制图层时&#xff0c;可以通过相关api实现添加图标到某个坐标点&#xff0c;那么如果现在有一个需要添加一个小图叠大图的需求&#xff0c;又或者是自定义绘制图标&#xff0c;如何实现&#xff1f; 1、简单地绘制一个图标到底图图层上面 const…

DevEco Studio 3.1IDE环境配置(HarmonyOS 3.1)

DevEco Studio 3.1IDE环境配置&#xff08;HarmonyOS 3.1&#xff09; 一、安装环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、环境安装 IDE下载地址&#xff1a;HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 IDE的安装就是…

智能优化算法应用:基于花授粉算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于花授粉算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于花授粉算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.花授粉算法4.实验参数设定5.算法结果6.参考文…

Python爬取酷我音乐

&#x1f388; 博主&#xff1a;一只程序猿子 &#x1f388; 博客主页&#xff1a;一只程序猿子 博客主页 &#x1f388; 个人介绍&#xff1a;爱好(bushi)编程&#xff01; &#x1f388; 创作不易&#xff1a;喜欢的话麻烦您点个&#x1f44d;和⭐&#xff01; &#x1f388;…

Sci Transl Med

今天给同学们分享一篇实验文章“Radiation-induced circulating myeloid-derived suppressor cells induce systemic lymphopenia after chemoradiotherapy in patients with glioblastoma”&#xff0c;这篇文章发表在Sci Transl Med期刊上&#xff0c;影响因子为17.1。 结果解…

2024 年 SEO 现状

搜索引擎优化&#xff08;SEO&#xff09;一直以来都是网络知名度和成功的基石。随着我们踏上 2024 年的征程&#xff0c;SEO领域正在经历重大变革&#xff0c;有些变革已经开始&#xff0c;这对企业、创作者和营销人员来说既是挑战也是机遇。 语音搜索 语音搜索曾是一个未来…

Docker入门指南:从基础到实践

在当今软件开发领域&#xff0c;Docker已经成为一种不可或缺的工具。通过将应用程序及其依赖项打包成轻量级的容器&#xff0c;Docker实现了开发、测试和部署的高度一致性。本文将深入研究Docker的基本概念&#xff0c;并通过详细的示例代码演示如何应用这些概念于实际场景中。…