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.mzph.cn/news/215473.shtml

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

相关文章

MongoDB在Windows系统和Linux系统中实现自动定时备份

本文主要介绍MongoDB在Windows系统和Linux系统中如何实现自动定时备份。 目录 MongoDB在Windows系统中实现自动定时备份MongoDB在Linux系统中实现自动定时备份备份步骤备份恢复 MongoDB在Windows系统中实现自动定时备份 要在Windows系统中实现自动定时备份MongoDB数据库&#…

区块链实验室(32) - 下载arm64的Prysm

Prysm是Ethereum的共识层。 1. 下载prysm.sh curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh --output prysm.sh && chmod x prysm.sh2. 下载x86版prysm共识客户端 ./prysm.sh beacon-chain --download-only3.下载arm64版prysm共识客…

Linux——web网站服务(一)

一、安装httpd服务器Apache网站服务 1、准备工作 为了避免发送端口冲突&#xff0c;程序冲突等现象&#xff0c;卸载使用rpm方式安装的httpd #使用命令检查是否下载了httpd [rootserver ~]# rpm -qa httpd #如果有则使用 [rootserver ~]# rpm -e httpd --nodeps Apache的配置…

抖音小店经营规则解析:避免被扣分的关键因素

抖音小店是一个受欢迎的电商平台&#xff0c;为创业者提供了良好的销售和推广机会。为了确保在抖音小店的运营中不会被扣分或出现其他问题&#xff0c;不若与众整理了几个关键的规则需要注意和遵守。 1. 产品合规性&#xff1a; 抖音小店要求所有销售的产品必须合法合规&#x…

欣赏动态之美,不如欣赏C语言实现动态内存管理之美 ! ! !

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 我会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 &#xff01;&#xff0…

ubuntu解决问题:E: Unable to locate package manpages-posix-dev

sudo apt-get install manpages-posix-dev 想要在ubuntu里面安装manpages-posix-dev这个包&#xff0c;发现弹出错误 E: Unable to locate package manpages-posix-dev 解决方法如下&#xff1a; 1 查看当前ubuntu的版本 abhishekitsfoss:~$ lsb_release -a No LSB module…

python自动化测试实战 —— WebDriver API的使用

软件测试专栏 感兴趣可看&#xff1a;软件测试专栏 自动化测试学习部分源码 python自动化测试相关知识&#xff1a; 【如何学习Python自动化测试】—— 自动化测试环境搭建 【如何学习python自动化测试】—— 浏览器驱动的安装 以及 如何更…

力扣题:数字与字符串间转换-12.12

力扣题-12.12 [力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 力扣题1&#xff1a;539. 最小时间差 解题思想&#xff1a;将字符串的时间形式换成数字形式的时间&#xff0c;然后计算差值即可&#xff0c;最重要的是最小的值加上一天的时间加入到数组最后&#xff08…

图文教程:stable-diffusion的基本使用教程 txt2img(多图)

之前我介绍了SD的安装过程&#xff0c;那么这篇将介绍怎么使用SD 使用模型 SD安装好之后&#xff0c;我们只有一个默认的模型。这个模型很难满足我们的绘图需求&#xff0c;那么有2种方法。 1是自己训练一个模型&#xff08;有门槛&#xff09;2是去网站上找一个别人练好的模…

windows 镜像下载地址

HelloWindows.cn - 精校 完整 极致 Windows系统下载仓储站

python自动化运维快速入门,python自动化运维教程

大家好&#xff0c;给大家分享一下python自动化运维需要掌握的技能&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; 面向学员 熟练使用计算机&#xff0c;对Windows、Linux 有一点了解从业职或在校学生 对目前从事互联网运维&#xff0c;想…

附录:已实现的多品种回测收益

声明&#xff1a; 本人不进行任何投资建议&#xff0c;也不出售任何包括策略、算法的程序代码。 仅作为个人的2023年开发心路总结&#xff0c;有任何异议可以在评论区留言&#xff0c;可以讨论&#xff0c;如果你杠&#xff0c;那就是你对。 这世上有很多条路&#xff0c;每个…

12.11作业

第一个界面的头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMovie> #include <QMessageBox>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidg…

代理IP的正确打开方式,使用IPIDEA解决性能困境

目录 1、王婆卖瓜&#xff0c;自卖自夸2、问问2023最专业的AI机器人3、有事没事找吒哥 一、代理IP的困境和问题1、困境一&#xff1a;所在公司网络环境不好2、困境2&#xff1a;代理协议使用不当3、困境3&#xff1a;免费的代理服务器宽带小4、困境4&#xff1a;代理服务器距离…

第二百零二回 介绍一个三方包bluetooth_enable_fork

文章目录 1. 概念介绍2. 使用方法2.1 自定义主题2.2 覆盖父主题 3. 示例代码 我们在上一章回中介绍了图片缩放相关的内容&#xff0c;本章回中将介绍如使用主题.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在这里说的主题包含两方面的内容&#xff1a;…

Leetcode93 复原IP地址

复原IP地址 题解1 回溯(同分割回文字符串)Tips&#xff1a;换成deque<string>tmp会更快 有效 IP 地址正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2…

SpringCloud面试题——Sentinel

一&#xff1a;什么是Sentinel&#xff1f; Sentinel是一个面向分布式架构的轻量级服务保护框架&#xff0c;实现服务降级、服务熔断、服务限流等功能 二&#xff1a;什么是服务降级&#xff1f; 比如当某个服务繁忙,不能让客户端的请求一直等待,应该立刻返回给客户端一个备…

达索系统SOLIDWORKS 2024零件特征功能增强

SolidWorks是一款专业的三维3D设计软件&#xff0c;功能强悍&#xff0c;支持分布式数据管理&#xff0c;支持直接处理网格数据&#xff0c;提供更多的数据的灵活性&#xff0c;使用起来高效便捷。可以帮助用户轻松进行3D CAD设计、机械设计、钣金设计、模拟设计、电气设计、PD…

swing快速入门(六)

注释很详细&#xff0c;直接上代码 上一篇 本篇新增内容 Gridlayout&#xff08;网格布局&#xff09; Textfield组件的最大限定长度 Panel()的默认布局方式 Gridlayout的默认布局位置 import java.awt.*;public class swing_test_4 {public static void main(String[]ar…

UE4 透明物体不渲染显示??

问题描述&#xff1a;半透明特效在背景&#xff08;半透明材质模型&#xff09;前&#xff0c;当半透明特效开始移动的时候&#xff0c;随着速度的加快会逐渐不渲染&#xff01; 解决办法&#xff1a; 1.设置透明度排序 2.如果还没效果&#xff0c;修改半透明背景模型以下材质…