百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

Swagger3.0官方starte诞生了其它的都可以扔了

liuian 2025-02-26 12:45 44 浏览

  • 资料
  • swagger介绍
  • springfox介绍
  • SpringFox 3.0.0 发布
  • 整合使用
  • 一些常用注解说明
  • 示例
  • 参考

资料

  • swagger 官网:swagger.io
  • springfox 官网:springfox
  • springfox Github 仓库:springfox / springfox
  • springfox-demos Github 仓库:springfox / springfox-demos
  • springfox Maven 仓库:Home ? io.springfox

swagger介绍

对于 Rest API 来说很重要的一部分内容就是文档,Swagger 为我们提供了一套通过代码和注解自动生成文档的方法,这一点对于保证 API 文档的及时性将有很大的帮助。

Swagger 是一套基于 OpenAPI 规范(OpenAPI Specification,OAS)构建的开源工具,可以帮助我们设计、构建、记录以及使用 Rest API。

OAS本身是一个API规范,它用于描述一整套API接口,包括一个接口是哪种请求方式、哪些参数、哪些header等,都会被包括在这个文件中。它在设计的时候通常是YAML格式,这种格式书写起来比较方便,而在网络中传输时又会以json形式居多,因为json的通用性比较强。

Swagger 主要包含了以下三个部分:

  • Swagger Editor:基于浏览器的编辑器,我们可以使用它编写我们 OpenAPI 规范。
  • Swagger UI:它会将我们编写的 OpenAPI 规范呈现为交互式的 API 文档,后文我将使用浏览器来查看并且操作我们的 Rest API。
  • Swagger Codegen:它可以通过为 OpenAPI(以前称为 Swagger)规范定义的任何 API 生成服务器存根和客户端 SDK 来简化构建过程。

springfox介绍

由于Spring的流行,Marty Pitt编写了一个基于Spring的组件swagger-springmvc,用于将swagger集成到springmvc中来,而springfox则是从这个组件发展而来。

通常SpringBoot项目整合swagger需要用到两个依赖:springfox-swagger2和springfox-swagger-ui,用于自动生成swagger文档。

  • springfox-swagger2:这个组件的功能用于帮助我们自动生成描述API的json文件
  • springfox-swagger-ui:就是将描述API的json文件解析出来,用一种更友好的方式呈现出来。

SpringFox 3.0.0 发布

官方说明:

  • SpringFox 3.0.0 发布了,SpringFox 的前身是 swagger-springmvc,是一个开源的 API doc 框架,可以将 Controller 的方法以文档的形式展现。
  • 首先,非常感谢社区让我有动力参与这个项目。在这个版本中,在代码、注释、bug报告方面有一些非常惊人的贡献,看到人们在问题论坛上跳槽来解决问题,我感到很谦卑。它确实激励我克服“困难”,开始认真地工作。有什么更好的办法来摆脱科维德的忧郁!
  • 注意:这是一个突破性的变更版本,我们已经尽可能地保持与springfox早期版本的向后兼容性。在2.9之前被弃用的api已经被积极地删除,并且标记了将在不久的将来消失的新api。所以请注意这些,并报告任何遗漏的内容。

新特性:

  • Remove explicit dependencies on springfox-swagger2
  • Remove any @EnableSwagger2… annotations
  • Add the springfox-boot-starter dependency
  • Springfox 3.x removes dependencies on guava and other 3rd party libraries (not zero dep yet! depends on spring plugin and open api libraries for annotations and models) so if you used guava predicates/functions those will need to transition to java 8 function interfaces.

此版本的亮点:

  • Spring5,Webflux支持(仅支持请求映射,尚不支持功能端点)。
  • Spring Integration支持(非常感谢反馈)。
  • SpringBoot支持springfox Boot starter依赖性(零配置、自动配置支持)。
  • 具有自动完成功能的文档化配置属性。
  • 更好的规范兼容性与2.0。
  • 支持OpenApi 3.0.3。
  • 零依赖。几乎只需要spring-plugin,swagger-core ,现有的swagger2注释将继续工作并丰富openapi3.0规范。

兼容性说明:

  • 需要Java 8
  • 需要Spring5.x(未在早期版本中测试)
  • 需要SpringBoot 2.2+(未在早期版本中测试)

注意:

应用主类增加注解@EnableOpenApi,删除之前版本的SwaggerConfig.java。

启动项目,访问地址:http://localhost:8080/swagger-ui/index.html,注意2.x版本中访问的地址的为http://localhost:8080/swagger-ui.html

整合使用

Maven项目中引入springfox-boot-starter依赖:


????io.springfox
????springfox-boot-starter
????3.0.0

12345

application.yml配置

spring:
??application:
????name:?springfox-swagger
server:
??port:?8080

#?=====?自定义swagger配置?=====?#
swagger:
??enable:?true
??application-name:?${spring.application.name}
??application-version:?1.0
??application-description:?springfox?swagger?3.0整合Demo
??try-host:?http://localhost:${server.port}
12345678910111213

使用@EnableOpenApi注解,启用swagger配置

@EnableOpenApi
@Configuration
public?class?SwaggerConfiguration?{

}
12345

自定义swagger配置类SwaggerProperties

@Component
@ConfigurationProperties("swagger")
public?class?SwaggerProperties?{
????/**
?????*?是否开启swagger,生产环境一般关闭,所以这里定义一个变量
?????*/
????private?Boolean?enable;

????/**
?????*?项目应用名
?????*/
????private?String?applicationName;

????/**
?????*?项目版本信息
?????*/
????private?String?applicationVersion;

????/**
?????*?项目描述信息
?????*/
????private?String?applicationDescription;

????/**
?????*?接口调试地址
?????*/
????private?String?tryHost;

????public?Boolean?getEnable()?{
????????return?enable;
????}

????public?void?setEnable(Boolean?enable)?{
????????this.enable?=?enable;
????}

????public?String?getApplicationName()?{
????????return?applicationName;
????}

????public?void?setApplicationName(String?applicationName)?{
????????this.applicationName?=?applicationName;
????}

????public?String?getApplicationVersion()?{
????????return?applicationVersion;
????}

????public?void?setApplicationVersion(String?applicationVersion)?{
????????this.applicationVersion?=?applicationVersion;
????}

????public?String?getApplicationDescription()?{
????????return?applicationDescription;
????}

????public?void?setApplicationDescription(String?applicationDescription)?{
????????this.applicationDescription?=?applicationDescription;
????}

????public?String?getTryHost()?{
????????return?tryHost;
????}

????public?void?setTryHost(String?tryHost)?{
????????this.tryHost?=?tryHost;
????}
}
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

一个完整详细的springfox swagger配置示例:

import?io.swagger.models.auth.In;
import?org.apache.commons.lang3.reflect.FieldUtils;
import?org.springframework.boot.SpringBootVersion;
import?org.springframework.context.annotation.Bean;
import?org.springframework.context.annotation.Configuration;
import?org.springframework.util.ReflectionUtils;
import?org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import?org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import?org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import?springfox.documentation.builders.ApiInfoBuilder;
import?springfox.documentation.builders.PathSelectors;
import?springfox.documentation.builders.RequestHandlerSelectors;
import?springfox.documentation.oas.annotations.EnableOpenApi;
import?springfox.documentation.service.*;
import?springfox.documentation.spi.DocumentationType;
import?springfox.documentation.spi.service.contexts.SecurityContext;
import?springfox.documentation.spring.web.plugins.Docket;

import?java.lang.reflect.Field;
import?java.util.*;

@EnableOpenApi
@Configuration
public?class?SwaggerConfiguration?implements?WebMvcConfigurer?{
????private?final?SwaggerProperties?swaggerProperties;

????public?SwaggerConfiguration(SwaggerProperties?swaggerProperties)?{
????????this.swaggerProperties?=?swaggerProperties;
????}

????@Bean
????public?Docket?createRestApi()?{
????????return?new?Docket(DocumentationType.OAS_30).pathMapping("/")

????????????????//?定义是否开启swagger,false为关闭,可以通过变量控制
????????????????.enable(swaggerProperties.getEnable())

????????????????//?将api的元信息设置为包含在json ResourceListing响应中。
????????????????.apiInfo(apiInfo())

????????????????//?接口调试地址
????????????????.host(swaggerProperties.getTryHost())

????????????????//?选择哪些接口作为swagger的doc发布
????????????????.select()
????????????????.apis(RequestHandlerSelectors.any())
????????????????.paths(PathSelectors.any())
????????????????.build()

????????????????//?支持的通讯协议集合
????????????????.protocols(newHashSet("https",?"http"))

????????????????//?授权信息设置,必要的header?token等认证信息
????????????????.securitySchemes(securitySchemes())

????????????????//?授权信息全局应用
????????????????.securityContexts(securityContexts());
????}

????/**
?????*?API?页面上半部分展示信息
?????*/
????private?ApiInfo?apiInfo()?{
????????return?new?ApiInfoBuilder().title(swaggerProperties.getApplicationName()?+?"?Api?Doc")
????????????????.description(swaggerProperties.getApplicationDescription())
????????????????.contact(new?Contact("lighter",?null,?"123456@gmail.com"))
????????????????.version("Application?Version:?"?+?swaggerProperties.getApplicationVersion()?+?",?Spring?Boot?Version:?"?+?SpringBootVersion.getVersion())
????????????????.build();
????}

????/**
?????*?设置授权信息
?????*/
????private?List?securitySchemes()?{
????????ApiKey?apiKey?=?new?ApiKey("BASE_TOKEN",?"token",?In.HEADER.toValue());
????????return?Collections.singletonList(apiKey);
????}

????/**
?????*?授权信息全局应用
?????*/
????private?List?securityContexts()?{
????????return?Collections.singletonList(
????????????????SecurityContext.builder()
????????????????????????.securityReferences(Collections.singletonList(new?SecurityReference("BASE_TOKEN",?new?AuthorizationScope[]{new?AuthorizationScope("global",?"")})))
????????????????????????.build()
????????);
????}

????@SafeVarargs
????private?final??Set?newHashSet(T...?ts)?{
????????if?(ts.length?>?0)?{
????????????return?new?LinkedHashSet<>(Arrays.asList(ts));
????????}
????????return?null;
????}

????/**
?????*?通用拦截器排除swagger设置,所有拦截器都会自动加swagger相关的资源排除信息
?????*/
????@SuppressWarnings("unchecked")
????@Override
????public?void?addInterceptors(InterceptorRegistry?registry)?{
????????try?{
????????????Field?registrationsField?=?FieldUtils.getField(InterceptorRegistry.class,?"registrations",?true);
????????????List?registrations?=?(List)?ReflectionUtils.getField(registrationsField,?registry);
????????????if?(registrations?!=?null)?{
????????????????for?(InterceptorRegistration?interceptorRegistration?:?registrations)?{
????????????????????interceptorRegistration
????????????????????????????.excludePathPatterns("/swagger**/**")
????????????????????????????.excludePathPatterns("/webjars/**")
????????????????????????????.excludePathPatterns("/v3/**")
????????????????????????????.excludePathPatterns("/doc.html");
????????????????}
????????????}
????????}?catch?(Exception?e)?{
????????????e.printStackTrace();
????????}
????}

}
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121

一些常用注解说明

  • @Api:用在controller类,描述API接口
  • @ApiOperation:描述接口方法
  • @ApiModel:描述对象
  • @ApiModelProperty:描述对象属性
  • @ApiImplicitParams:描述接口参数
  • @ApiResponses:描述接口响应
  • @ApiIgnore:忽略接口方法

示例

项目Demo:springfox-swagger

效果图:

相关推荐

驱动网卡(怎么从新驱动网卡)
驱动网卡(怎么从新驱动网卡)

网卡一般是指为电脑主机提供有线无线网络功能的适配器。而网卡驱动指的就是电脑连接识别这些网卡型号的桥梁。网卡只有打上了网卡驱动才能正常使用。并不是说所有的网卡一插到电脑上面就能进行数据传输了,他都需要里面芯片组的驱动文件才能支持他进行数据传输...

2026-01-30 00:37 liuian

win10更新助手装系统(微软win10更新助手)

1、点击首页“系统升级”的按钮,给出弹框,告诉用户需要上传IMEI码才能使用升级服务。同时给出同意和取消按钮。华为手机助手2、点击同意,则进入到“系统升级”功能华为手机助手华为手机助手3、在检测界面,...

windows11专业版密钥最新(windows11专业版激活码永久)

 Windows11专业版的正版密钥,我们是对windows的激活所必备的工具。该密钥我们可以通过微软商城或者通过计算机的硬件供应商去购买获得。获得了windows11专业版的正版密钥后,我...

手机删过的软件恢复(手机删除过的软件怎么恢复)
手机删过的软件恢复(手机删除过的软件怎么恢复)

操作步骤:1、首先,我们需要先打开手机。然后在许多图标中找到带有[文件管理]文本的图标,然后单击“文件管理”进入页面。2、进入页面后,我们将在顶部看到一行文本:手机,最新信息,文档,视频,图片,音乐,收藏,最后是我们正在寻找的[更多],单击...

2026-01-29 23:55 liuian

一键ghost手动备份系统步骤(一键ghost 备份)

  步骤1、首先把装有一键GHOST装系统的U盘插在电脑上,然后打开电脑马上按F2或DEL键入BIOS界面,然后就选择BOOT打USDHDD模式选择好,然后按F10键保存,电脑就会马上重启。  步骤...

怎么创建局域网(怎么创建局域网打游戏)

  1、购买路由器一台。进入路由器把dhcp功能打开  2、购买一台交换机。从路由器lan端口拉出一条网线查到交换机的任意一个端口上。  3、两台以上电脑。从交换机任意端口拉出网线插到电脑上(电脑设置...

精灵驱动器官方下载(精灵驱动手机版下载)

是的。驱动精灵是一款集驱动管理和硬件检测于一体的、专业级的驱动管理和维护工具。驱动精灵为用户提供驱动备份、恢复、安装、删除、在线更新等实用功能。1、全新驱动精灵2012引擎,大幅提升硬件和驱动辨识能力...

一键还原系统步骤(一键还原系统有哪些)

1、首先需要下载安装一下Windows一键还原程序,在安装程序窗口中,点击“下一步”,弹出“用户许可协议”窗口,选择“我同意该许可协议的条款”,并点击“下一步”。  2、在弹出的“准备安装”窗口中,可...

电脑加速器哪个好(电脑加速器哪款好)

我认为pp加速器最好用,飞速土豆太懒,急速酷六根本不工作。pp加速器什么网页都加速,太任劳任怨了!以上是个人观点,具体性能请自己试。ps:我家电脑性能很好。迅游加速盒子是可以加速电脑的。因为有过之...

任何u盘都可以做启动盘吗(u盘必须做成启动盘才能装系统吗)

是的,需要注意,U盘的大小要在4G以上,最好是8G以上,因为启动盘里面需要装系统,内存小的话,不能用来安装系统。内存卡或者U盘或者移动硬盘都可以用来做启动盘安装系统。普通的U盘就可以,不过最好U盘...

u盘怎么恢复文件(u盘文件恢复的方法)

开360安全卫士,点击上面的“功能大全”。点击文件恢复然后点击“数据”下的“文件恢复”功能。选择驱动接着选择需要恢复的驱动,选择接入的U盘。点击开始扫描选好就点击中间的“开始扫描”,开始扫描U盘数据。...

系统虚拟内存太低怎么办(系统虚拟内存占用过高什么原因)

1.检查系统虚拟内存使用情况,如果发现有大量的空闲内存,可以尝试释放一些不必要的进程,以释放内存空间。2.如果系统虚拟内存使用率较高,可以尝试增加系统虚拟内存的大小,以便更多的应用程序可以使用更多...

剪贴板权限设置方法(剪贴板访问权限)
剪贴板权限设置方法(剪贴板访问权限)

1、首先打开iphone手机,触碰并按住单词或图像直到显示选择选项。2、其次,然后选取“拷贝”或“剪贴板”。3、勾选需要的“权限”,最后选择开启,即可完成苹果剪贴板权限设置。仅参考1.打开苹果手机设置按钮,点击【通用】。2.点击【键盘】,再...

2026-01-29 21:37 liuian

平板系统重装大师(平板重装win系统)

如果你的平板开不了机,但可以连接上电脑,那就能好办,楼主下载安装个平板刷机王到你的个人电脑上,然后连接你的平板,平板刷机王会自动识别你的平板,平板刷机王上有你平板的我刷机包,楼主点击下载一个,下载完成...

联想官网售后服务网点(联想官网售后服务热线)

联想3c服务中心是联想旗下的官方售后,是基于互联网O2O模式开发的全新服务平台。可以为终端用户提供多品牌手机、电脑以及其他3C类产品的维修、保养和保险服务。根据客户需求层次,联想服务针对个人及家庭客户...