Spring Boot 集成 swagger 3.0 指南

Spring Boot 集成 swagger 3.0 指南

    • 一、Swagger介绍
      • 1.springfox-swagger 2
      • 2.SpringFox 3.0.0 发布
    • 二、Spring Boot 集成 swagger 3.0
      • 1. 添加Maven依赖
      • 2. 创建配置类配置Swagger
        • 2.1 创建SwaggerConfig 配置类
        • 2.1 创建TestInfoConfig信息配置类
      • 3. 在你的Controller上添加swagger注解
      • 4. 如启用了访问权限,还需将swagger相关uri允许匿名访问
      • 5. 启动与访问

一、Swagger介绍

  • 号称世界上最流行的Api框架;
  • Restful Api 文档在线自动生成工具=>Api文档与API定义同步更新
  • 直接运行,可以在在线测试API 接口
  • 支持多种语言:(java,Php…)

官网地址:https://swagger.io/

1.springfox-swagger 2

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

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

2.SpringFox 3.0.0 发布

此版本的亮点:

  • Spring5,Webflux支持(仅支持请求映射,尚不支持功能端点)。
  • Spring Integration支持。
  • SpringBoot支持springfox Boot starter依赖性(零配置、自动配置支持)。
  • 支持OpenApi 3.0.3。
  • 零依赖。几乎只需要spring-plugin,swagger-core ,现有的swagger2注释将继续工作并丰富openapi3.0规范。

兼容性说明:

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

注意:Swagger2.0Swagger3.0有很多区别,下面使用的是Swagger3.0,有区别的地方会简单说明。

二、Spring Boot 集成 swagger 3.0

1. 添加Maven依赖

引入依赖springfox-boot-starter:

<!-- 引入Swagger3依赖 -->
<dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version>
</dependency>

2. 创建配置类配置Swagger

自定义配置信息:
3.0版本在配置上与2.9稍有差别,包括依赖包改为: springfox-boot-starter,启用注解更改为: @EnableOpenApi等。

  • Swagger3.0 注解:@EnableOpenApi
  • Swagger2.0 注解:@EnableSwagger2
2.1 创建SwaggerConfig 配置类
package com.test.web.core.config;import java.util.ArrayList;
import java.util.List;import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.test.common.config.TestInfoConfig;
import io.swagger.annotations.ApiOperation;
import io.swagger.models.auth.In;
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.ApiInfo;
import springfox.documentation.service.ApiKey;
import springfox.documentation.service.AuthorizationScope;
import springfox.documentation.service.Contact;
import springfox.documentation.service.SecurityReference;
import springfox.documentation.service.SecurityScheme;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;/*** Swagger3的接口配置** @author fy*/
@Configuration
//默认开启 可注释
//@EnableOpenApi
public class SwaggerConfig {/*** 系统基础配置  yml文件可配置读取*/@Autowiredprivate TestInfoConfig testInfoConfig;/*** 是否开启swagger*/@Value("${swagger.enabled}")private boolean enabled;/*** 设置请求的统一前缀*/@Value("${swagger.pathMapping}")private String pathMapping;/*** 创建API*/@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.OAS_30)// 使用 swagger 开关。默认 true.enable(enabled)// 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息).apiInfo(apiInfo())// 设置哪些接口暴露给Swagger展示.select()// 扫描所有有注解的api,用这种方式更灵活// 以 @ApiOperation 注解为依据进行扫描.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))// 以 @Api 注解为依据进行扫描.apis(RequestHandlerSelectors.withClassAnnotation(Api.class))// 扫描指定包中的swagger注解//.apis(RequestHandlerSelectors.basePackage("com.test.web"))// 扫描所有// .apis(RequestHandlerSelectors.any())//过滤器:对外暴露所有 URI.paths(PathSelectors.any())//.paths(none())  // 过滤器:一个 URI 都不对外暴露//.paths(ant())   // 过滤器:对外暴露符合 ANT 风格正则表达式的 URI//.paths(regex()  // 过滤器:对外暴露符合正则表达式的 URI.build()//设置安全模式,swagger可以设置访问token.securitySchemes(securitySchemes()).securityContexts(securityContexts());
//                .pathMapping(pathMapping)}/*** 安全模式,这里指定token通过Authorization头请求头传递*/private List<SecurityScheme> securitySchemes() {List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>();apiKeyList.add(new ApiKey("Authorization", "Authorization", In.HEADER.toValue()));return apiKeyList;}/*** 安全上下文*/private List<SecurityContext> securityContexts() {List<SecurityContext> securityContexts = new ArrayList<>();securityContexts.add(SecurityContext.builder().securityReferences(defaultAuth()).operationSelector(o -> o.requestMappingPattern().matches("/.*")).build());return securityContexts;}/*** 默认的安全上引用*/private List<SecurityReference> defaultAuth() {AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];authorizationScopes[0] = authorizationScope;List<SecurityReference> securityReferences = new ArrayList<>();securityReferences.add(new SecurityReference("Authorization", authorizationScopes));return securityReferences;}/*** 添加摘要信息*/private ApiInfo apiInfo() {// 用ApiInfoBuilder进行定制return new ApiInfoBuilder()// 设置标题.title("Test API文档")// 描述.description("某物联网平台接口文档说明")// 作者信息.contact(new Contact(testInfoConfig.getName(), "http://aaaa.com", "ahsjda@163.com"))// 版本.version(testInfoConfig.getVersion()).build();}
}
2.1 创建TestInfoConfig信息配置类
package com.test.common.config;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** 读取项目相关配置** @author fy*/
@Component
@ConfigurationProperties(prefix = "test")
@Data
public class TestInfoConfig{/*** 项目名称*/private String name;/*** 版本*/private String version;/*** 版权年份*/private String copyrightYear;
}

TestInfoConfig Yml配置信息如下图所示:
在这里插入图片描述

3. 在你的Controller上添加swagger注解

在这里插入图片描述

4. 如启用了访问权限,还需将swagger相关uri允许匿名访问

具体需要添加的uri有:

/swagger**/**
/webjars/**
/v3/**
/doc.html

5. 启动与访问

启动应用,访问地址http://localhost:8080/swagger-ui/index.html

Swagger2.0 、Swagger3.0访问地址区别:

  • Swagger3.0 访问地址:http://localhost:8080/swagger-ui/index.html
  • Swagger2.0 访问地址:http://localhost:8080/swagger-ui.html

在这里插入图片描述

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

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

相关文章

【思源笔记】思源笔记配置S3同步

本文首发于 ❄️慕雪的寒舍 文章目录 1. 写在前面2. 什么是思源笔记的S3/WEBDAV同步&#xff1f;2.1. 说明2.2. 思源的同步配置和工作空间2.3. 什么是S3协议&#xff1f; 3. 配置思源S3同步3.1. 初始化数据仓库密钥3.2. 思源S3同步界面3.3. 配置七牛云KODO3.4. 如何将同步配置导…

以GD32F103C8T6为例的核心板原理图PCB绘制学习笔记简单总结

目录 GD32F103C8T6核心板 设计流程 基础知识 部分原理图解析 排针连接 (H1 - PZ254V-12-8P): 晶振 封装 基础知识 C0603封装 C0805 F1210封装 保险丝 L0603 贴片电感 LED-0603 R0603 HDR-TH_8P-P2.54-V-M-R2-C4-S2.54 排针 按键&#xff08;SW-SMD-T6X…

Python(PyTorch)物理变化可微分神经算法

&#x1f3af;要点 &#x1f3af;使用受控物理变换序列实现可训练分层物理计算 | &#x1f3af;多模机械振荡、非线性电子振荡器和光学二次谐波生成神经算法验证 | &#x1f3af;训练输入数据&#xff0c;物理系统变换产生输出和可微分数字模型估计损失的梯度 | &#x1f3af;…

Nacos微服务注册管理中心与服务通信

参照springboot-alibaba-ribbon项目学习 E:\Codes\Idea_java_works\apesource\springboot\微服务\springboot_alibaba_ribbon Nacos 微服务注册中心-discover Nacos 是⼀个更易于构建云原⽣应⽤的动态服务发现、配置管理和服务管理平台。简单来说 Nacos 就是 注册中⼼ 配置…

Java入门:06.Java中的方法--进阶02.03

2 可变参数 方法调用时&#xff0c; 传递的实参数量&#xff0c;是由被调用方法的参数列表数列决定的。 一般来讲&#xff0c;传递的实参数量必须与形参变量数量相同&#xff0c;但是也有一种特殊的参数&#xff0c;允许调用时传递的实参数量是可变&#xff0c;这种参数就称为…

CSS3多行多栏布局

当前布局由6个等宽行组成&#xff0c;其中第四行有三栏&#xff0c;第五行有四栏。 重点第四行设置&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>img {hei…

AI 时代的编程革命:如何在挑战中抓住机遇?

AI 发展对软件开发的挑战与机遇&#xff1a;程序员应对策略 随着人工智能&#xff08;AI&#xff09;技术的快速进步&#xff0c;软件开发领域正经历深刻的变革。AI 不仅改变了编程的方式&#xff0c;也对程序员的职业发展产生了重要影响。在这个背景下&#xff0c;我们既看到…

HTML5休闲小游戏《砖块破坏者》源码,引流、刷广告利器

HTML5休闲小游戏《砖块破坏者》源码&#xff0c;直接把源码上传到服务器就能使用了&#xff01; 下载链接&#xff1a;https://www.huzhan.com/code/goods468802.html

Linux:Bash中的命令介绍(简单命令、管道以及命令列表)

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 在Bash中&#xff0c;命令执行的方式可以分为简单命令、管道和命令列表组成。这些结构提供了强大的工具&#xff0c;允许用户组合命令并精确控制其执行方式。以下是对这…

2024年【电气试验】找解析及电气试验模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 电气试验找解析根据新电气试验考试大纲要求&#xff0c;安全生产模拟考试一点通将电气试验模拟考试试题进行汇编&#xff0c;组成一套电气试验全真模拟考试试题&#xff0c;学员可通过电气试验模拟考试全真模拟&#…

文件IO和多路复用IO

目录 前言 一、文件 I/O 1.基本文件 I/O 操作 1.1打开文件 1.2读取文件内容 (read) 1.3写入文件 (write) 1.4关闭文件 (close) 2.文件指针 二、多路复用 I/O 1.常用的多路复用 I/O 模型 1.1select 1.2poll 1.3epoll 2.使用 select、poll 和 epoll 进行简单的 I/O…

C++观察者模式Observer

组件协作 –(都是晚绑定的&#xff09; ----观察者模式 为某些对象建立一种通知依赖的关系&#xff0c; 只要这个对象状态发生改变&#xff0c;观察者对象都能得到通知。 但是依赖关系要松耦合&#xff0c;不要太依赖。 eg&#xff1a;做一个文件分割器&#xff0c;需要一个…

css实现水滴效果图

效果图&#xff1a; <template><div style"width: 100%;height:500px;padding:20px;"><div class"water"></div></div> </template> <script> export default {data() {return {};},watch: {},created() {},me…

B/S架构和C/S架构的区别

B/S架构、C/S架构区别 1. B/S架构 1.1 什么是B/S架构 B/S架构的全称为Browser/Server&#xff0c;即浏览器/服务器结构。Browser指的是Web浏览器&#xff0c;极少数事务逻辑在前端实现&#xff0c;但主要事务逻辑在服务器端实现。B/S架构的系统无须特别安装&#xff0c;只需要…

动态内存管理-经典笔试题

目录 题目一&#xff1a; 题目二&#xff1a; 题目三&#xff1a; 题目四&#xff1a; 题目一&#xff1a; 结果&#xff1a;程序崩溃 原因&#xff1a; 1、函数是传值调用&#xff0c;出了函数p不存在&#xff0c;str未改变&#xff0c;依旧为空指针&#xff0c;运行时发…

【CTF Web】CTFShow 版本控制泄露源码2 Writeup(目录扫描+.svn泄漏)

版本控制泄露源码2 10 版本控制很重要&#xff0c;但不要部署到生产环境更重要。 解法 用 dirsearch 扫描。 dirsearch -u https://8d22223d-dc2c-419c-b82d-a1d781eda427.challenge.ctf.show/找到 .svn 仓库。 访问&#xff1a; https://8d22223d-dc2c-419c-b82d-a1d781eda…

ubuntu安装minio

# 下载MinIO的可执行文件 curl -O https://dl.min.io/server/minio/release/linux-amd64/minio # 添加执行权限 chmod x minio # 运行MinIO (需要先创建存储数据和存储存储桶的目录) nohup ./minio server /home/lighthouse/minioDir/data /home/lighthouse/minioDir/bucke…

修复线上问题,又造成了个Bug

项目场景 这是一位朋友给我分享的实际线上问题&#xff0c;看似简单却害了项目再次造出一个bug来。 场景&#xff1a;线上环境中&#xff0c;需要查询某某业务数据&#xff0c;条件是状态&#xff0c;之前产品只要求查两个状态的&#xff0c;但现在让他再多查一个状态的。 自…

时序预测|基于贝叶斯BO-卷积-双向门控单元-注意力机制的单变量时间序列预测模型BO-CNN-BiGRU-Attention

时序预测|基于贝叶斯BO-卷积-双向门控单元-注意力机制的单变量时间序列预测模型BO-CNN-BiGRU-Attention 文章目录 前言时序预测|基于贝叶斯BO-卷积-双向门控单元-注意力机制的单变量时间序列预测模型BO-CNN-BiGRU-Attention 一、BO-CNN-BiGRU-Attention模型1. 贝叶斯优化&#…

Go Convey测试框架入门(go convey gomonkey)

Go Convey测试框架入门 介绍 GoConvey是一款针对Golang的测试框架&#xff0c;可以管理和运行测试用例&#xff0c;同时提供了丰富的断言函数&#xff0c;并支持很多 Web 界面特性。 Golang虽然自带了单元测试功能&#xff0c;并且在GoConvey框架诞生之前也出现了许多第三方测…