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

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

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

  • 资料
  • 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

效果图:

相关推荐

tplink说明书图片(tp-link路由器说明书步骤图)

第一步连接路由器WIFI在手机获取IP地址里找到路由器网关地址,第二步在浏览器地址栏输入路由器网关地址,之后会跳转到路由器管理员登录界面,输入账号密码就可以进入路由后台管理路由,如果提示路由器密码错误...

如何不安装flash玩4399(现在4399不提供flash如何玩游戏)

没有flash是玩不了的,需要开启flash才可以。1、首先打开浏览器,进入4399的游戏页面。2、进入游戏页面后,点击【已被屏蔽】文字。3、然后右上角会出现窗口,点击【管理】按钮。4、进入管理页面后...

chrome download apk(chromedownloadapk in english)

手机下载安装的第三方应用出现问题,无法正常使用,建议按照以下方法操作:1.关闭重新启动该应用。2.建议将此软件卸载重新安装尝试。3.更换其他版本尝试。4.更新下手机系统版本后安装尝试5.备份手机数据(...

qq空间官网手机登录网页版(qq空间官网登陆入口)
qq空间官网手机登录网页版(qq空间官网登陆入口)

z.qq.com可以通过以下方式登录手机QQ空间:1、使用手机登录手机腾讯网3g.qq.com,点击“空间”,根据提示QQ号码和QQ密码就可以登录;2、通过手机直接输入手机QQ空间网址z.qq.com,根据提示操作即可登录;3、下载手机Q...

2025-12-22 13:55 liuian

windows11我的电脑在哪里打开

1/6通过“开始”进入“设置”-“时间和语言”。2/6在“时间和语言”界面选择“区域”3/6这里我们将区域更改位“新加披”,退出。4/6打开微软自带的市场,搜索“你的手机”获取并下载。5/6安装完成后...

win10怎么取消开机自启动(win10如何关闭开机自动启动)

要关闭Windows10的开机自动启动程序,你可以按下Win+R键,输入"msconfig"并按回车键打开系统配置工具。在"启动"选项卡中,你可以看到所有开机自动...

手机cpu排名2025(手机cpu排名榜)

一、2022手机CPU性能综合排名前八名手机CPU:1、型号:苹果A16---综合分数:暂无2、型号:骁龙8gen1---综合分数:42333、联发科天玑9000---综合分数:38724、...

论坛系统(论坛系统数据流图)

BBS是电子布告栏系统的简称,一种网站系统,也是目前流行网络论坛的前身。它允许用户使用终端程序通过调制解调器拨接或者因特网来进行连接,BBS站台提供布告栏、分类讨论区、新闻阅读、软件下载与上传、游戏、...

hp1020plus打印机无法打印(惠普1020plus打印机突然不能打印了)

 删除惠普打印机驱动和软件:1.如果你的打印机已通过USB连接到电脑,断开USB连接;2.打开控制面板—程序和功能(卸载或更改应用程序);3.在软件列表中找到惠普打印机,将其卸载;4.重启电脑...

wifi密码破解器电脑版(wifi密码破解工具电脑版)

肯定不是万能钥匙这种“破解”wifi的东西。不是一两次见到把万能钥匙当做破解wifi用的人了,但实际上那玩意就是个分享wifi的软件。你连上一个wifi,密码就会被分享到云端(可以不分享),别...

手机临时文件夹在哪个位置(手机临时文件夹在哪个位置找)

1.手机文件临时文件是指在手机使用过程中产生的临时文件。2.手机应用程序在运行时需要产生一些临时文件,如缓存文件、日志文件、临时下载文件等,这些文件可以提高应用程序的运行效率和用户体验。但是,这些...

安卓10系统下载(安卓10 下载)

方法及步骤:  其实使用安卓车机下载歌曲的方法十分的简单,具体操作步骤和安卓手机一模一样。  首先我们需要在车机的应用商店上,下载一个音乐播放器,例如网易云音乐或者QQ音乐等。  下载完成后点击进入...

华硕人工客服24小时吗(华硕售后人工客服)

华硕服务中心广东省惠州市惠东县城平深路(创富斜对面)惠东同心电脑城1L11(1.3km)笔记本电脑,平板电脑华硕服务中心广东省惠州市惠东县平山镇同心电脑城1F26(1.3km)笔记本电脑,平...

电脑音量小喇叭不见了(电脑声音喇叭图标不见了怎么办)

如果您电脑上的小喇叭(扬声器)不见了,可以尝试以下方法找回:1.检查设备管理器:在Windows下,右键点击“我的电脑”(或此电脑)->点击“属性”->点击“设备管理器”,查看“声音、视...

腾达路由器手机设置教程(腾达路由器手机设置教程视频)

用手机设置腾达路由器的方法如下:1在手机上打开浏览器,输入路由器背面的管理IP和用户及对应的密码2一般第一次打开,默认会跳出设置向导,准备好宽带用户名和密码,3按向导提示输入相应内容4在无线设置的安全...