springboot 2.7集成swagger 3

2023-11-13


前言

springboot集成swagger2技术比较成熟,基本不挑版本。网上技术文章一找一大堆,不在此赘述。但是sprngboot 2.6.x以上版本在集成swagger 3的时候,会报Failed to start bean 'documentationPluginsBootstrapper'; 错误

网上关于此问题的解决,有各种各样的方案,但实际实践起来非常麻烦。比如这种方案在网上说的比较多,但实际上,应用效果并不佳。

解决此问题,降版本的方案我就不说了,如果确实需要使用sprngboot 2.6.x以上版本在集成swagger 3 的兄弟,请往下看。

错误原因

报错内容

Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException

报错原因

Springfox使用的路径匹配是基于AntPathMatcher的,而Spring Boot 2.6.X使用的是PathPatternMatcher

解决方案

依赖配置

在pom.xml中引入以下核心配置

    <dependencies>
        <!-- web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--swagger3-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>
    </dependencies>

    <!--版本管理-->
    <dependencyManagement>
        <dependencies>
            <!--SpringBoot-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.7.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

webmvc配置

在config目录下,新建MyWebMvcConfigurer,修改资源映射路径,完成mvc与swagger对接。
注意,这一步是最核心的,由于springboot使用的是PathPatternMatcher,所以无法识别swagger的静态资源路径。网上很多的方法指导是将springboot2.6.x版本的路径匹配规则修改回AntPathMatcher,因此要改一堆配置。而直接添加addResourceHandlers的方式,能够避免复杂的配置工作。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

@Configuration
public class MyWebMvcConfigurer extends WebMvcConfigurationSupport {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // swagger配置
        registry.
                addResourceHandler("/swagger-ui/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/")
                .resourceChain(false);
    }
}

swagger配置

在config目录下,新建Swagger3Config,配置swagger所需参数

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.builders.RequestParameterBuilder;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.schema.ScalarType;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.ParameterType;
import springfox.documentation.service.RequestParameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

import java.util.ArrayList;
import java.util.List;

@Configuration
@EnableOpenApi // swagger3开启注解,与swagger2不同
public class Swagger3Config {

    /**
     * 文档基本信息
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("swagger口文档")
                .description("swagger接口文档")
                .version("2.0")
                .build();
    }

    /**
     * 全局通用属性(摘要)配置
     */
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.OAS_30)
                .apiInfo(apiInfo()) //应用文档基本信息
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.albert.backend.api")) // swagger扫描路径
                .paths(PathSelectors.any()) // 应用于包下所有路径
                .build()
                .ignoredParameterTypes(User.class, AdminUser.class) // 忽略此类型输入参数(viewResovler全局添加的)
                .globalRequestParameters(getGlobalRequestParameters()); // 设置全局通用参数
    }

    /**
     * 项目通用参数,添加全局参数——登录认证token(若无可省略)
     */
    private List<RequestParameter> getGlobalRequestParameters() {
        List<RequestParameter> parameters = new ArrayList<>();
        parameters.add(new RequestParameterBuilder()
                .name("token") // 参数名
                .query(q -> q.model(m -> m.scalarModel(ScalarType.STRING))) //参数类型
                .description("登录认证token") // 描述
                .required(false) // 非必传
                .in(ParameterType.HEADER) //请求头中的参数,其它类型可以点进ParameterType类中查看
                .build());
        return parameters;
    }
}

结果

完成以上配置,swagger可正常运行,无报错

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springboot 2.7集成swagger 3 的相关文章

随机推荐

  • vite、vue3警告:Component inside <Transition> renders non-element root node that cannot be animated.

    一 问题代码
  • 关于编程中的一些颜色代码

    颜色代码 1 浅粉色 255 182 193 2 粉红色 255 192 203 3 猩红色 220 20 60 4 脸红的淡紫色 255 240 245 5 苍白的紫罗兰红色 219 112 147 6 热情的粉红 255 105 180
  • 冰箱日订单数据分析(京东)python代码

    具体分析报告地址 PowerBi网页版 数据 2020年5月25日京东大家电 家用电器 冰箱订单数据 按10 抽样 约22MB 70k 条数据 包含信息 user log acct 用户账号 parent sale ord id 父订单号
  • Chrome等浏览器下出现net::ERR_BLOCKED_BY_CLIENT的解决办法

    当我们在做开发时 调试页面图片会出现部分图片无法正常显示 并且确认图片的地址正确 按F12 Debug查看报错原因 提示net ERR BLOCKED BY CLIENT错误 但当我们点击图片地址发现 图片地址并无错误 遇到这类情况 一般都
  • 关于一次element-ui的列表功能处理的过程记录(多选样式单选功能)

    大概是这样的 这边需要做两个表格 一个在左边 一个在右边 左边的已经做好了 是一个多选列表 右边的也做好了 是一个element ui自带的单选列表 就像这样 可是左边的多选列表样式和这个不一样 看着就会比较怪 所以要求我去修样式 我有点蒙
  • uni-app使用npm安装第三方包

    初始化npm工程 若项目之前未使用npm管理依赖 项目根目录下无package json文件 先在项目根目录执行命令初始化npm工程 npm init y cli项目默认已经有package json了 HBuilderX创建的项目默认没有
  • socket.io 中namespace 和 room的概念。

    基本概念看socketio官方文档 http socket io docs rooms and namespaces namespace 和room的概念其实用来同一个服务端socket多路复用的 namespace room和socket
  • PHP利用SOAP进行webservice开发(客户端)

    参考 http blog sina com cn s blog 777f9dbb01010fd1 html 配置 windows php ini配置 extension php soap dll extension php curl dll
  • linux主要的文件和目录的作用(详细版)

    在 Linux 下 我们看到的是文件夹 目录 在早期的 UNIX 系统中 各个厂家各自定义了自己的 UNIX 系统文件目录 比较混乱 Linux 面世不久后 对文件目录进行了标准化 于1994年对根文件目录做了统一的规范 推出 FHS Fi
  • DirectShowPlayerService::doSetUrlSource: Unresolved error code

    Qt 编译后不能播放音乐或者视频 经过搜索得知 Qt 中的多媒体播放 底层是使用DirectShowPlayerService 需要一个DirectShow解码器 例如LAV Filters LAV Filters的下载地址如下 http
  • FPGA的基本结构

    FPGA主要由以下几部分组成 1 基本可编程逻辑单元 CLB 2 可编程输入输出单元 IOB 3 嵌入式块RAM 4 内嵌的底层功能单元和嵌入式专用硬核 5 完整的时钟管理模块 6 丰富的布线资源 一 总体结构 二 基本组成部分 1 可配置
  • NMS(非极大值抑制)算法详解与示例

    一 NMS是什么 NMS non maximum suppression 即非极大值抑制 广泛应用于传统的特征提取和深度学习的目标检测算法中 NMS原理是通过筛选出局部极大值得到最优解 在2维边缘提取中体现在提取边缘轮廓后将一些梯度方向变化
  • vue设置延时

    参考资料 https blog csdn net zc ad article details 86235227 一定要创建一个timer 然后调用延时之前先清除timer的延时 clearTimeout this timer 清除延迟执行
  • scala数据结构

    元组 val tuple Bigdata 2020 748 333 容器 collection Scala Collection Seq 索引0 1 2 LinearSeq gt 列表 相同类型 不可变 队列 列表 var strList
  • SpringIOC和AOP介绍

    Spring介绍 1 spring是轻量级的开源的JavaEE框架 2 Spring可以解决企业应用开发的复杂性 3 Spring有两个核心部分 IOC AOP 1 IOC 控制反转 把创建好的对象给Spring进行管理 2 AOP 面向切
  • 模式识别、计算机视觉、机器学习领域的顶级期刊和会议(整理)

    部分AI刊物影响因子05 SCIIF 2005 2004 JMLR 4 027 5 952 机器学习 PAMI 3 810 4 352 模式识别 IJCV 3 657 2 914 计算机视觉 TOIS 4 529 4 097 AIJ 2 6
  • Neo4j下载安装以及Neo4j浏览器详细说明

    1 下载 需要提前安装 JDK 自行百度 前往官网 https neo4j com download center community 如上图 下载共有三个模式 企业版本 社区版本和桌面版本 企业版本收费的 社区版本免费 只是个人运行建议直
  • 请告诉我一些常见的泰勒公式展开

    常见的泰勒公式展开有 1 二项式展开 x y n nCkx n k y k 2 三角形展开 a b c 2 a 2 b 2 c 2 2ab 2ac 2bc 3 多项式展开 x y z 3 x 3 y 3 z 3 3x 2y 3x 2z 3x
  • 勤于奋:的日常,写程序,做任务,赚美刀,分享我的成长

    大家好 欢迎来到勤于奋 今天跟大家聊聊我的日常吧 大家好 欢迎来到勤于奋国外LEAD联盟营销 勤于奋时刻提醒自己 只有勤快和奋斗合一体 天天坚持去做一件事情 才能有可能成功 所以我很喜欢这个名字 每天我都会关注程序语言的发展 开发技术的更新
  • springboot 2.7集成swagger 3

    目录 前言 错误原因 报错内容 报错原因 解决方案 依赖配置 webmvc配置 swagger配置 结果 前言 springboot集成swagger2技术比较成熟 基本不挑版本 网上技术文章一找一大堆 不在此赘述 但是sprngboot