webflux整合swagger教程V2版

news2025/5/22 12:22:38

1. yml文件配置

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
        <version>2.1.0.RELEASE</version>
    </dependency>
    
    <!--数据库开始-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
        <version>2.1.0.RELEASE</version>
    </dependency>
    <!--数据库结束-->
	<!--整合swagger开始-->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-spring-webflux</artifactId>
        <version>3.0.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.plugin</groupId>
                <artifactId>spring-plugin-core</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework.plugin</groupId>
                <artifactId>spring-plugin-metadata</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>3.0.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.plugin</groupId>
                <artifactId>spring-plugin-core</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework.plugin</groupId>
                <artifactId>spring-plugin-metadata</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>3.0.0</version>
    </dependency>
	<!--整合swagger结束-->
	<!--引入更高版本开始-->
    <dependency>
        <groupId>org.springframework.plugin</groupId>
        <artifactId>spring-plugin-core</artifactId>
        <version>2.0.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.plugin</groupId>
        <artifactId>spring-plugin-metadata</artifactId>
        <version>2.0.0.RELEASE</version>
    </dependency>
    <!--引入更高版本结束-->
    <!--引入swagger样式开始-->
	<dependency>
        <groupId>com.github.xiaoymin</groupId>
        <artifactId>swagger-bootstrap-ui</artifactId>
        <version>1.9.6</version>
    </dependency>
    <!--引入swagger样式结束-->
</dependencies>

2. Application

package com.zkdj.ytdp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.data.web.ReactivePageableHandlerMethodArgumentResolver;
import org.springframework.data.web.ReactiveSortHandlerMethodArgumentResolver;
import org.springframework.web.reactive.config.WebFluxConfigurer;
import org.springframework.web.reactive.result.method.annotation.ArgumentResolverConfigurer;


@SpringBootApplication
@ComponentScan(basePackages = {"com.zkdj.ytdp"},
        excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,
                classes = {}))
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class,args);
    } 
}

3.SwaggerUiWebFluxConfigurer

在官网上看到了 WebFluxConfigurer,通过配置实现 WebFluxConfigurer 后,可以完美解决 webflux 整合
swagger 出现 404 问题。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.config.CorsRegistry;
import org.springframework.web.reactive.config.ResourceHandlerRegistry;
import org.springframework.web.reactive.config.WebFluxConfigurer;

@Configuration
public class SwaggerUiWebFluxConfigurer implements WebFluxConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // 配置跨域
        registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET", "POST", "OPTION", "DELETE").maxAge(3600);
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 重新映射路径
        registry.
                addResourceHandler("/swagger-ui/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/")
                .resourceChain(false);

        registry.addResourceHandler("/swagger-ui.html**")
                .addResourceLocations("classpath:/META-INF/resources/");

        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/").resourceChain(true);
    }
}

4.SwaggerWebFluxConfig

现在需要开启 swagger,网上很多人使用的是 @EnableSwagger2WebFlux
注解,那是因为他们使用的是快照版本,现在的正式版本已经把它废弃掉了 @Deprecated,推荐的还是使用 @EnableSwagger2。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.VendorExtension;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger.web.UiConfiguration;
import springfox.documentation.swagger.web.UiConfigurationBuilder;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;
import java.util.Optional;

@Configuration
@EnableSwagger2
public class SwaggerWebFluxConfig {

    //配置Swagger的Docket的bean实例
    @Bean
    public Docket docket(Environment environment) {
        //设置要配置的Swagger环境
        Profiles profiles = Profiles.of("dev");
//        Profiles profiles = Profiles.of("test");
        //通过environment.acceptsProfiles判断是否处在自己设定的环境中
        boolean flag = environment.acceptsProfiles(profiles);

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())//配置Swagger信息
                .enable(flag) //通过flag判断是否开启
                .select()
                /**
                 * apis():指定扫描的接口
                 *  RequestHandlerSelectors:配置要扫描接口的方式
                 *       basePackage:指定要扫描的包
                 *       any:扫面全部
                 *       none:不扫描
                 *       withClassAnnotation:扫描类上的注解(参数是类上注解的class对象)
                 *       withMethodAnnotation:扫描方法上的注解(参数是方法上的注解的class对象)
                 */
                .apis(RequestHandlerSelectors.basePackage("com.zkdj.ytdp.controller"))
                /**
                 * paths():过滤路径
                 *  PathSelectors:配置过滤的路径
                 *      any:过滤全部路径
                 *      none:不过滤路径
                 *      ant:过滤指定路径:按照按照Spring的AntPathMatcher提供的match方法进行匹配
                 *      regex:过滤指定路径:按照String的matches方法进行匹配
                 */
                .paths(PathSelectors.any())
                .build()
                .genericModelSubstitutes(Optional.class, Flux.class, Mono.class);
    }

    //配置Swagger信息
    private ApiInfo apiInfo() {
        return new ApiInfo(
                "Api Documentation",
                "Swagger API文档",
                "1.0",
                null,
                null,
                null,
                null,
                new ArrayList<VendorExtension>());
    }

    @Bean
    public UiConfiguration uiConfig() {
        return UiConfigurationBuilder.builder()
//                .deepLinking(true)
//                .displayOperationId(false)
//                 隐藏UI上的Models模块
//                .defaultModelsExpandDepth(-1)
//                .defaultModelExpandDepth(-1)
//                .defaultModelRendering(ModelRendering.MODEL)
//                .displayRequestDuration(false)
//                .docExpansion(DocExpansion.NONE)
//                .filter(false)
//                .maxDisplayedTags(null)
//                .operationsSorter(OperationsSorter.ALPHA)
//                .showExtensions(false)
//                .tagsSorter(TagsSorter.ALPHA)
//                .validatorUrl(null)
                .build();
    }
}

4.不加swagger样式

访问地址 http://localhost:8080/swagger-ui/index.html

在这里插入图片描述

5.加了swagger样式

访问地址 http://localhost:8080/doc.html

在这里插入图片描述

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

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

相关文章

python @classmethod

1..什么是classmethod classmethod是用来指定一个类的方法为类方法 长的像下面这个样子 1 2 3 class cc: classmethod def f(cls, arg1, arg2, ...): ... cls通常用作类方法的第一参数 跟self有点类似&#xff08; __init__里面的slef通常用作实例方法的第一参数)。…

vue开发环境配置Visual Studio Code配置和安装教程

方便前端vue开发&#xff0c;使用vs code插件安装详细教程&#xff0c;关于vs code可以网络上相关的教程&#xff0c;插件安装如下图所示&#xff0c;大家常用的插件可再分享&#xff0c;与我联系。 1 安装Vue语法高亮显示插件&#xff1a;vetur 2 安装vue语法提示插件&#xf…

小孩上了半年小学,针对老师的评语总结,如何对症优化教育培养策略?chatGPT搜了一下,AI震惊了我

评语 班主任评语&#xff1a; 你是一个性格内向、聪明伶俐的男孩。平时能按时完成老师布置的作业&#xff0c;学习认真&#xff0c;成绩优良&#xff0c;做事认真。但有时自己的事情还不能自己完成&#xff0c;希望你以后可以独立起来&#xff0c;遇到问题多想办法&…

高性能网关基石——OpenResty

什么是 OpenRestyOpenResty 一个基于 Nginx 的高性能 Web 平台&#xff0c;能够方便地搭建处理超高并发的动态 Web 应用、 Web 服务和动态网关。例如有名的 Kong 网关和国产新秀 ApiSIX 网关都是基于 OpenResty 来进行打造的。OpenResty 通过实现 ngx_lua 和 stream_lua 等 Ngi…

Nmap工具使用

Nmap工具使用1.Nmap简介1.1.Nmap介绍1.2.Nmap功能介绍1.3.Nmap下载1.4.Nmap端口状态2.Nmap基本使用2.1.Nmap基础扫描2.2.Nmap基础扫描多个目标2.3.Nmap详细扫描输出2.4.Nmap指定端口扫描2.4.1.单端口扫描2.4.2.端口范围扫描2.4.3.端口组合扫描2.5.Nmap扫描排除2.5.1.排除一个主…

强大的ANTLR4(6)--设计语法

四种抽象的计算机语言模式&#xff1a; 1&#xff09;序列&#xff1a;一列元素&#xff0c;数组 2&#xff09;选择&#xff1a;在多个可选方案中做出选择 3&#xff09;词法符号依赖&#xff1a;例如左右括号匹配 4&#xff09;嵌套结构&#xff1a;一种自相似的语言结构。 …

lambda表达式入门

一、函数式编程思想 1 概念 面向对象思想需要关注用什么对象完成什么时期&#xff0c;而函数式编程思想更类似于我们数学中的函数&#xff0c;它主要关注的是对数据进行了什么操作 2 优点 代码简洁&#xff0c;开发快速接近自然语言&#xff0c;易于理解易于"并发编程…

计算机网络——BGP协议

BGP协议 和谁交换&#xff1a;与其他AS的邻站BGP发言人交换信息。 交换什么&#xff1a;交换网络可达性信息 多久交换一次&#xff1a;发生变化时更新有变化的部分 一般来说两个网络都是由一个BGP发言人连接的。 BGP协议交换信息的过程 BGP协议所交换的网络可达性的信息就…

Haproxy 代理后端服务

参考 http://www.haproxy.org HAProxy GitHub 目录 一、Haproxy环境准备 1、Haproxy简介 1.1、haproxy原理 1.2、Haproxy优点 2、在线apt安装 二、使用Haproxy 1、基本脚本结构示例 2、配置反向代理 3、验证haproxy 3.1、重启服务 3.2、访问后台管理 3.3、访问…

Linux下用gdb定位Qt程序崩溃位置(systemd-coredump)

目录1. systemd-coredump2. 用gdb定位崩溃位置Linux提供了systemd-coredump服务&#xff0c;可以配合gdb来定位到程序崩溃位置&#xff0c;下面介绍它们的用法。1. systemd-coredump systemd-coredump的简单介绍&#xff1a; systemd-coredump能从操作系统内核中获取内存转储&…

IDEA2022.1创建Maven web项目 + SpringMVC入门学习

SpingMVC 入门案例 文章目录SpingMVC 入门案例项目的结构1.导入SpringMVC和Servlet依赖2.创建SpringMVC控制器类&#xff08;等同Servlet&#xff09;3.初始化SpingMVC环境&#xff08;同Spring环境&#xff09;&#xff0c;设定SpringMVC加载对应的bean4.创建web容器启动类&am…

MWORKS.Sysplorer基于数据字典管理模型参数应用案例

1 引言 在面向微控制器的建模过程中&#xff0c;控制算法是可以复用到不同型号的同类产品中的。为了提高控制算法的可移植性&#xff0c;需要将模型与数据分开管理。如果不将模型与数据分开管理&#xff0c;直接将数据保存到模型中&#xff0c;即使在非批产的工程化应用或者小…

11.前端笔记-Bootstrap前端框架

1.Bootstrap简介 框架&#xff1a; 就是一台架构&#xff0c;有较为完整的网页功能解决方案&#xff0c;而且控制权在框架本身&#xff0c;有预制样式库、组件和插件。使用者要按照框架规定的规范进行开发 参考&#xff1a; 中文官网&#xff1a;http://www.bootcss.com 官…

Spring中实用的11个扩展点

我们一说到spring,可能第一个想到的是 IOC(控制反转) 和 AOP(面向切面编程)。 没错,它们是spring的基石,得益于它们的优秀设计,使得spring能够从众多优秀框架中脱颖而出。 除此之外,我们在使用spring的过程中,有没有发现它的扩展能力非常强。由于这个优势的存在,让…

【Vue2+Element ui通用后台】面包屑和tag功能

文章目录面包屑tag面包屑 Element ui 面包屑&#xff1a;显示当前页面的路径&#xff0c;快速返回之前的任意页面&#xff0c;完成效果如下&#xff1a; 我们之前把头部的代码封装到了 CommonHeader.vue 中&#xff0c;面包屑部分直接写死了一个首页&#xff0c;我们可以把官…

C++:STL:常用算法(下):拷贝,算术,集合算法

一&#xff1a;常用拷贝和替换算法 学习目标&#xff1a;掌握常用的拷贝和替换算法 算法简介&#xff1a; copy // 容器内指定范围的元素拷贝到另一容器中 replace // 将容器内指定范围的旧元素修改为新元素 replace_if // 容器内指定范围满足条件的元素替换为新元素…

2023-01-04 Echarts学习笔记(三) Echarts的实际应用场景:在网页中插入Echarts的折线图,饼图和柱状图

文章目录零.准备和说明1.最终页面效果2.资源地址一.网页布局1.网页结构分析2.其他准备3.完整代码index.htmlcss/index.scss4.效果5.知识点(待补充)contentzoomz-index&::afterkeyframe二.插入Echarts图表零.准备和说明 1.最终页面效果 主要分为两个部分,一是先进行常规页面…

BeautifulSoup深入学习

BeautifulSoup深入学习 简介 BeautifulSoup是python的一个库&#xff0c;其提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱&#xff0c;通过解析文档为用户提供需要抓取的数据&#xff0c;因为简单&#xff0c;所以不需要多少代码就可…

使用Hog特征进行字母和数字的分类

目的&#xff1a;使用字母数字的二值图像&#xff0c;进行识别&#xff1a; 整体思路&#xff1a; 1&#xff09;对图像进行预处理&#xff1b; 对收集的单个字符进行二值化&#xff0c;进行数据均衡&#xff0c;并且将所有的字符图片直接resize为20*20&#xff08;有过进行…

Docker镜像如何上传阿里云

目录 1.前期准备 2.push(推)镜像 3.pull(拉)镜像 1.前期准备 1.注册阿里云账户 阿里云官方网站链接&#xff1a;https://dev.aliyun.com 2.登陆账户 3.配置Docker加速器 注&#xff1a;搜索“容器镜像服务” 4.创建镜像仓库的命名空间 例如&#xff1a;xnx 5.创建镜像仓库(创…