SpringBoot整合Swagger3,赶紧整起来!

news2024/11/26 18:49:46

文章目录

  • 一、Swagger是什么?
  • 二、使用步骤
    • 1.引入swagger3依赖
    • 2.添加swagger.conf配置类
    • 3.添加application.yml配置
    • 4.查看是否整合成功
    • 5.常用注解
    • 6.swagger美化
  • 总结


一、Swagger是什么?

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。

总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法、参数和模型紧密集成到服务器端的代码,允许 API 来始终保持同步。Swagger 让部署管理和使用功能强大的 API 从未如此简单。

二、使用步骤

1.引入swagger3依赖

代码如下:

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

2.添加swagger.conf配置类

代码如下:

package com.uhu.swagger;


import io.swagger.models.auth.In;
import liquibase.repackaged.org.apache.commons.lang3.reflect.FieldUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
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.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import org.springframework.context.annotation.Configuration;

/**
 * @author liujunjie
 * @description swagger配置
 * @create 2023-11-06 15:16
 **/
@Configuration 
// 声明开启swagger2
@EnableOpenApi
public class SwaggerConfig implements WebMvcConfigurer {

    /**
     * 是否开启swagger
     */
    @Value("${uhu.swagger.enable}")
    private Boolean enable;

    /**
     * 标题
     */
    @Value("${uhu.swagger.title}")
    private String title;

    /**
     * 版本
     */
    @Value("${uhu.swagger.version}")
    private String version;

    /**
     * 描述
     */
    @Value("${uhu.swagger.description}")
    private String description;

    /**
     * 扫描的包
     */

    @Value("${uhu.swagger.scanPackage}")
    private String scanPackage;

    /**
     * 接口调试地址
     */
    @Value("${uhu.swagger.host}")
    private String host;

    @Bean
    Docket api() {
        // springfox 的基本API配置
        return new Docket(DocumentationType.OAS_30)
                // 将映射的路径当作base Path,添加给apis
                .pathMapping("/")
                // 定义是否开启swagger,false为关闭,可以通过变量控制
                .enable(enable)

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

                // 接口调试地址
                .host(host)

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

                // 支持的通讯协议集合
                .protocols(new HashSet<>(Arrays.asList("http", "https")))

                // 授权信息设置,必要的header token等认证信息
                .securitySchemes(Collections.singletonList(new ApiKey("BASE_TOKEN", "token", In.HEADER.toValue())))

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

    /**
     * API 页面上半部分展示信息
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title(title + " Api Doc")
                .description(description)
                .contact(new Contact("xxx", null, "xxx@mail.com"))
                .version(version)
                .build();
    }

    /**
     * 通用拦截器排除swagger设置,所有拦截器都会自动加swagger相关的资源排除信息
     */
    @SuppressWarnings("unchecked")
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        try {
            Field registrationsField = FieldUtils.getField(InterceptorRegistry.class, "registrations", true);
            List<InterceptorRegistration> registrations = (List<InterceptorRegistration>) 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();
        }
    }

}


3.添加application.yml配置

代码如下:

uhu:
  swagger:
    enable: true
    title: ${spring.application.name}
    version: 1.0.0
    description: 企业合规管理系统接口文档
    scanPackage: com.uhu
    host: http://localhost:${server.port}

4.查看是否整合成功

项目启动,访问 http://localhost:port/context-path/swagger-ui.html
在这里插入图片描述

5.常用注解

注解注解说明用法
@Api类注解,用于给控制器取别名在这里插入图片描述
@ApiOperation常用来描述方法在这里插入图片描述
@ApiModel和@ApiModelProperty描述请求响应描述在这里插入图片描述
@ApiParam路径参数注解在这里插入图片描述
@ApiImplicitParam和@ApiImplicitParams描述方法参数在这里插入图片描述

6.swagger美化

添加美化依赖

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>

添加yml配置

knife4j:
  enable: true
  basic:
    enable: true
    username: admin
    password: admin
  setting:
    language: zh-CN

重启服务
访问 http://localhost:port/context-path/doc.html
在这里插入图片描述


总结

通过集成 Swagger3,我们可以方便地生成接口文档,使得前后端开发协同更加高效,通过knife4j进行美化后的页面更加适合国人的阅读习惯。
以上就是SpringBoot整合Swagger3的方式,是不是很简单,赶紧用起来吧!!!

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

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

相关文章

μC/OS-II---内核:多任务与调度

目录 内核&#xff1a;多任务与调度&#xff08;ucos_ii.h文件的函数&#xff09;Task创建Task创建&#xff08;扩展&#xff09;Task删除/请求删除Task改变Task优先级Task挂起和恢复Task信息获取Task调度器上锁和开锁 内核&#xff1a;多任务与调度&#xff08;ucos_ii.h文件的…

MCGS触摸屏

触摸屏上的接口 D型下载口又称为USB通信 网口下载方式称为TCP 流程 新建项目---- 下载线下载程序 网线下载 U盘下载 详细步骤 触摸屏仿真&#xff08;前提&#xff1a;必须连接PLC&#xff0c;且将程序写入PLC中&#xff09; 仿真要求&#xff1a;圆圈显示指示灯、显示…

Python教程:zipfile模块压缩文件

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 1、读取zip文件 要读取 ZIP 文件的内容&#xff0c;首先必须创建一个 ZipFile 对象&#xff08;请注意大写首字母 Z和 F&#xff09;。 ZipFile 对象在概念上与…

使用create-react-app脚手架创建react项目

查看npx版本&#xff1a; npx -v使用如下命令创建项目时&#xff1a; npx create-react-app demo报错&#xff1a; 解决&#xff1a; 以管理员身份运行cmd 然后再次创建项目&#xff0c;又报错&#xff1a; 经查得知&#xff1a;发生此错误是因为用户名中有空格&#xff0c;…

一手app拉新地推平台和网推平台升级啦 官签渠道直营

今天”聚量推客“升级啦 聚量推客是什么&#xff1f; 一手官签服务商&#xff0c;有大量的地推项目和网推项目&#xff0c;还有小说推文&#xff0c;流量卡推广&#xff0c;话费推广等众多推广场景平台 升级了什么&#xff1f; 今天为了让更多的地推团队和网推团队入驻我们…

(a)Mask RCNN总体流程

&#xff08;a&#xff09;Mask RCNN总体流程 一.Mask RCNN 架构 自己整理了一份Mask RCNN架构图如下&#xff0c;其中绿色模块只有推理过程才会涉及。 核心模块包括&#xff1a;数据预处理&#xff0c;骨干网络&#xff0c;区域提议网络&#xff0c;FastRCNN分支&#xff0c…

【MATLAB】设置图形透明度

1 Scatter散点图 % 设置散点大小 s.SizeData 100;散点标记符号设置如下&#xff1a; 在绘制散点图时&#xff0c;想设置透明度&#xff1a; 更改散点透明度后&#xff0c;图形如下&#xff1a; 相关绘图代码如下&#xff1a; figure(1) set(gcf, Units, figureUnits, Po…

剪贴板管理软件 Paste Wizard mac中文版功能特色

Paste Wizard mac是一款剪贴板管理工具&#xff0c;它可以帮助用户更高效地管理剪贴板中的文本、图片、链接等内容。 Paste Wizard mac特色功能 提供了多种方式来保存和管理剪贴板中的内容。用户可以创建自定义的标签&#xff0c;将内容按照标签进行分类&#xff0c;方便快速查…

【RPC】前传

前传 本地程序用的go语言&#xff0c;想把main.go程序当中一些计算工作放到服务器上进行&#xff0c;而只需要把结果给我即可。由于平台上暂时不能运行Go代码&#xff0c;所以写的是python文件。 1、主要是使用ssh依赖进行连接&#xff0c;但是大概率是需要手动添加的&#xf…

android手机平板拓展电脑屏幕

有这么两个软件 spacedesk_driver_Win_10_64_v1065_BETA.msi 安装在电脑上 spacedeskv0.91.1_chinese.apk 安装在android设备上 同一个局域网投屏就好了。 局域网无限投屏是很吃带宽的。 建议usb共享网络&#xff0c;不占用带宽、延迟低。 下载地址&#xff1a; https:/…

OpenCV实现手势虚拟拖拽

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天来学习一下如何使用OpenCV实现手势虚拟拖拽&#xff0c;欢迎大家一起前来探讨学习~ 一、主要步骤及库的功能介绍 1.主要步骤 要实现本次实验&#xff0c;主要步骤如下&#xff1a; 导入OpenCV库。通过OpenCV读取摄…

使用Drupal管理小型项目?试试Docker快速部署Drupal结合内网穿透实现远程访问

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525;个人专栏:《Linux深造日志》《C干货基地》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言1. Docker安装Drupal2. 本地局域网访问3 . Linux 安装cpolar4. 配置Drupal公网访问地址5. 公网远程访问Drupal…

四川思维跳动商务信息咨询有限公司可信吗?

在今天的数字化时代&#xff0c;抖音带货已成为一种全新的商业模式。许多公司都在通过这种形式进行产品推广和销售&#xff0c;其中&#xff0c;四川思维跳动商务信息咨询有限公司以其专业的服务和良好的信誉&#xff0c;在抖音带货领域赢得了广泛赞誉。 四川思维跳动商务信息…

抖店怎么做才会快速起店?跟着这个思路来,一周搞定!

大家好&#xff0c;我是电商糖果 有不少朋友&#xff0c;自己开了一家抖店。 因为不懂运营&#xff0c;店铺一直没有流量&#xff0c;也不出单。 糖果做抖店三年多了&#xff0c;不敢自吹有多么优秀&#xff0c;但是做店还是有一套自己的方法的。 按照糖果这个思路做店&…

echarts 图表 地图实例

效果&#xff1a; 代码实现&#xff1a; draw(data) {var option {tooltip: {trigger: item,icon: query,// triggerOn: click,formatter: function (e, t, n) {let string ;string <div style"padding:10px"><span style"padding-right:10px"…

Microsoft SDKs 有文件重定义导致编译失败的处理

一个32位的mfc项目&#xff0c;之前采用vs2019编译&#xff0c;现在换了电脑(系统是win10)&#xff0c;采用vs2022编译时&#xff0c;提示如下错误&#xff1a; 1>------ 已启动生成: 项目: aAnsys, 配置: Debug Win32 ------ 1>cl : 命令行 warning D9035: “Gm”选项…

【ubuntu】ubuntu系统查看服务命令

查看正在运行的服务 sudo service --status-all [] 代表服务是在启动运行的状态 [-] 代表服务是在关闭停止的状态

使用Go语言抓取酒店价格数据的技术实现

目录 一、引言 二、准备工作 三、抓取数据 四、数据处理与存储 五、数据分析与可视化 六、结论与展望 一、引言 随着互联网的快速发展&#xff0c;酒店预订已经成为人们出行的重要环节。在选择酒店时&#xff0c;价格是消费者考虑的重要因素之一。因此&#xff0c;抓取酒…

opencv读取图片的方式影响图像绘制的颜色

圆圈的颜色设置不变&#xff0c;仅仅更改imread读取图片的方式 #frame cv2.imread(img_path,2)##flag2,单通道&#xff0c;原深度 **frame cv2.imread(img_path)##flag2,单通道&#xff0c;原深度** #cv2.circle(frame, (int(lmx), int(lmy)), 8, (0, 0, 125), 3) ### open…

优思学院|推行精益六西格玛困难重重?7大原因分析助你避坑

六西格玛&#xff0c;是一种让企业在绩效管理的舞台上跳得更高更远的方法。它不仅仅是一套原则和技术&#xff0c;更是一种对完美的执着追求。 在这个舞台上&#xff0c;企业的流程管理得以严格、集中&#xff0c;质量得以高效提升。优思学院总结出六西格玛的核心是&#xff1…