SpringCloudGateway集成SpringDoc
SpringCloudGateway集成SpringDoc
最近在搞Spring版本升级,按客户要求升级Spring版本,原来用着SpringBoot 2.2.X版本,只需要升级SpringBoot 2.X最新版本也就可以满足客户Spring版本安全要求,可是好像最新的SpringBoot 2.X貌似也不支持Swagger2了,综合考虑,把项目的环境升级到SpringBoot3
版本
- SpringBoot 3.1.2
- SpringCloud 2022.0.3 (SpringCloudGateway 4.0.6)
- SpringDoc-OpenAPI 2.2.0
引入SpringDoc-OpenAPI依赖
<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webflux-api</artifactId><version>2.2.0</version>
</dependency>
<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webflux-ui</artifactId><version>2.2.0</version>
</dependency>
自动配置
思路
跟以前Swagger2集成Gateway差不多,读取Gateway的路由配置信息,刷新到SpringDoc-Swagger-UI属性去
实现
@Configuration
@ConditionalOnProperty(name = SPRINGDOC_ENABLED, matchIfMissing = true)
public class DocIntegrationConfig {@Autowiredprivate SwaggerUiConfigProperties swaggerUiConfigProperties;@Autowiredprivate RouteDefinitionLocator locator;@PostConstructpublic void apis() {//获取所有的路径配置List<RouteDefinition> definitions = locator.getRouteDefinitions().collectList().block();//过滤,只要lb模块式List<RouteDefinition> serviceRoutes = definitions.stream().filter(route -> null != route.getUri() && route.getUri().getScheme().equals("lb")).collect(Collectors.toList());//按根据PredicateDefinition参数值和/** 确定是否路径匹配Set<AbstractSwaggerUiConfigProperties.SwaggerUrl> lbRouteUrl = new HashSet<>();Optional.ofNullable(serviceRoutes).orElse(Collections.emptyList()).forEach(route -> {AbstractSwaggerUiConfigProperties.SwaggerUrl swaggerUrl = new AbstractSwaggerUiConfigProperties.SwaggerUrl();//获取路径前缀List<PredicateDefinition> predicates = route.getPredicates();if (null == predicates || predicates.size() <= 0) {return;}String prefix = "";for (PredicateDefinition predicate : predicates) {String predicateName = predicate.getName();if ("path".equalsIgnoreCase(predicateName)) {for (String regex : predicate.getArgs().values()) {if (regex.endsWith("/**")) {prefix = regex.substring(0, regex.length() - 3);continue;}}}}//不是路径匹配的路由,跳过if (StringUtils.isBlank(prefix)) {return;}swaggerUrl.setUrl(prefix + Constants.DEFAULT_API_DOCS_URL);swaggerUrl.setName(prefix);swaggerUrl.setDisplayName(route.getId());lbRouteUrl.add(swaggerUrl);});//添加swaggerUI服务集成匹配if (lbRouteUrl.size() > 0) {Set<AbstractSwaggerUiConfigProperties.SwaggerUrl> propertiesUrls = swaggerUiConfigProperties.getUrls();if (null == propertiesUrls || propertiesUrls.size() <= 0) {propertiesUrls = lbRouteUrl;} else {propertiesUrls.addAll(lbRouteUrl);}swaggerUiConfigProperties.setUrls(propertiesUrls);}}
}
然后就可以根据gateway的路由配置,自动在gateway springdoc界面生成各服务项,选择就可以查看该服务的在线文档。
借助swagger-ui.urls手动配置
springdoc,也提供配置的形式集成,配置swagger-ui.urls,就可以了,name为显示名称,url为服务api-docs,默认 /v3/api-docs。
springdoc:api-docs:#是否开启文档功能,默认为true,可不配置enabled: truewebjars:# 设置为空,不要前缀prefix:swagger-ui:path: /doc.htmlurls:- name: 网关服务接口url: /v3/api-docs- name: 某某服务接口url: /xxxx/v3/api-docs
在集成页面的右上角可看到配置的服务项,选择具体的服务

集成后CORS问题,请求查看下一篇文章
相关文章:
SpringCloudGateway集成SpringDoc
SpringCloudGateway集成SpringDoc 最近在搞Spring版本升级,按客户要求升级Spring版本,原来用着SpringBoot 2.2.X版本,只需要升级SpringBoot 2.X最新版本也就可以满足客户Spring版本安全要求,可是好像最新的SpringBoot 2.X貌似也不…...
ArcGIS将两个相同范围但不同比例或位置的矢量数据移动到相同位置
有两个市图层,一个是正确经纬度的市行政范围图层,另一个是其他软件导出获取的不正确经纬度信息或缺失信息。 如果单纯的依靠移动图层,使不正确的移动到正确位置需要很久。尝试定义投影等也不能解决。 使用ArcMap 的空间校正工具条ÿ…...
MySQL编写建表语句,如何优雅处理创建时间与更新时间
在 MySQL 中,可以使用 TIMESTAMP 或者 DATETIME 数据类型来存储日期和时间信息,并结合默认值和触发器来实现自动更新 createTime 和 updateTime 字段。 以下是一个示例建表语句,演示如何设置自动更新的 createTime 和 updateTime 字段&#…...
NetSuite as OIDC Provider 演示
书接上回。上次谈了借助第三方身份认证服务SSO登录NetSuite。 NetSuite OIDC、SAML SSO 演示_NetSuite知识会的博客-CSDN博客NetSuite的SSO的策略:第三方的身份认证服务商NetSuite as OIDC Provider。本文演示前者。https://blog.csdn.net/remottshanghai/article/…...
webrtc sdp各字段含义
WebRTC使用Session Description Protocol(SDP)实现传输协议的协商和描述。以下是SDP中常见的字段及其含义: v:协议版本号o:会话创建者的标识符、会话ID、和会话版本号s:会话名称t:会话时间描述…...
Docker 常用服务 安装使用 教程
Docker安装常用服务 1、 安装mysql # 1.拉取mysql镜像到本地 docker pull mysql:tag (tag不加默认最新版本) # 2.运行mysql服务 docker run --name mysql -e MYSQL_ROOT_PASSWORDroot -d mysql:tag --没有暴露外部端口外部不能连接 docker run --name mysql -e MYSQL_ROOT_PAS…...
Java String类(2)
String方法 字符串拆分 可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串 相关方法如下: 方法功能String[ ] split(String regex)//以regex分割将字符串根据regex全部拆分String[ ] split(String regex, int limit)将字符串以指定的格式,拆…...
基于图像切割计算轨迹相似度
目录 背景思路与核心代码数值实验优缺点分析参考文献 背景 在前面2文,我们分别讨论了利用夹角余弦来计算轨迹相似度和利用缓冲原理来计算轨迹相似度两种方法,前者可以作为一个baseline提供参考,后者的计算更符合人们的感官和事实,…...
Day49|leetcode 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II
leetcode 121. 买卖股票的最佳时机 题目链接:121. 买卖股票的最佳时机 - 力扣(LeetCode) 视频链接:动态规划之 LeetCode:121.买卖股票的最佳时机1_哔哩哔哩_bilibili 题目概述 给定一个数组 ,它的第 个元…...
【项目经验】:elementui表格中表头的多选框换成文字
一.项目需求 表格可以多选,表头都是汉字。。。。类似于这种 二.实现功能 用到的方法 Table Attributes 参数说明类型可选值默认值header-cell-class-name表头单元格的 className 的回调方法,也可以使用字符串为所有表头单元格设置一个固定的 className。…...
【LeetCode】剑指 Offer <二刷>(4)
目录 题目:剑指 Offer 09. 用两个栈实现队列 - 力扣(LeetCode) 题目的接口: 解题思路: 代码: 过啦!!! 题目:剑指 Offer 10- I. 斐波那契数列 - 力扣&am…...
CentOS7查看和关闭防火墙
CentOS 7.0默认使用的是firewall作为防火墙 查看防火墙状态 firewall-cmd --state1 停止firewall systemctl stop firewalld.service1 禁止firewall开机启动 systemctl disable firewalld.service 1 转自:CentOS 6和CentOS 7防火墙的关闭 Centos7开放及查看…...
LeetCode 无重复字符的最长子串 打败100%的人
😀前言 LeetCode上的“无重复字符的最长子串”问题要求我们找到给定字符串中不包含重复字符的最长子串的长度。这个问题是一个典型的滑动窗口技巧的应用,需要有效地处理字符出现的情况来找到解决方案。 . 在本解决方案中,我们将探讨两种不同的…...
Spring Boot中通过maven进行多环境配置
上文 java Spring Boot将不同配置拆分入不同文件管理 中 我们说到了,多环境的多文件区分管理 说到多环境 其实不止我们 Spring Boot有 很多的东西都有 那么 这就有一个问题 如果 spring 和 maven 都配置了环境 而且他们配的不一样 那么 会用谁的呢? 此…...
python自动化Selenium的使用
python自动化Selenium的使用 Selenium是一个自动化测试框架,用于模拟和控制浏览器操作,支持多种编程语言。它可以模拟人类用户在浏览器上的操作(如点击、滚动、输入等),并检查网页内容和元素的属性。Selenium可用于对…...
大数据课程K13——Spark的距离度量相似度度量
文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Spark的距离度量和相似度度量; ⚪ 掌握Spark的欧氏距离; ⚪ 掌握Spark的曼哈顿距离; ⚪ 掌握Spark的切比雪夫距离; ⚪ 掌握Spark的最小二乘法; 一、距离度量和相似度度量 1. …...
Lambda表达式第四版
1、冗余的Runnbale代码 package com.lambda;public class Demo01Runnable {public static void main(String[] args) {RunnableImpl runnable new RunnableImpl();Thread thread new Thread(runnable);thread.start();//Lambda表达式} }class RunnableImpl implements Runnab…...
自定义类加载器
java中自定义类加载器,并将双亲委派改为逆向双亲委派 自定义类加载器JarLoader: package cn.ac.iscas.dmo.common.tools.core.classloader;import org.apache.commons.collections4.MapUtils;import java.io.*; import java.net.URL; import java.net.U…...
【Redis】Redis 的学习教程(七)之 SpringBoot 集成 Redis
在前几篇文章中,我们详细介绍了 Redis 的一些功能特性以及主流的 java 客户端 api 使用方法。 在当前流行的微服务以及分布式集群环境下,Redis 的使用场景可以说非常的广泛,能解决集群环境下系统中遇到的不少技术问题,在此列举几…...
Vlan和Trunk
文章目录 一、VLAN的定义与背景1. 传统以太网的问题(广播域)2. 用VLAN隔离广播域3. VLAN的优点与应用 二、VLAN的转发过程举例三、802.1Q标签:帧格式与作用四、VLAN工作原理交换机端口类型AccessTrunkHybrid PVID(Port VLAN ID&am…...
LLaMA-Omni代码贡献指南:如何参与这个开源语音AI项目
LLaMA-Omni代码贡献指南:如何参与这个开源语音AI项目 【免费下载链接】LLaMA-Omni LLaMA-Omni is a low-latency and high-quality end-to-end speech interaction model built upon Llama-3.1-8B-Instruct, aiming to achieve speech capabilities at the GPT-4o l…...
DeepWiki-Open技术解析:构建完全离线的AI文档生成创新方案
DeepWiki-Open技术解析:构建完全离线的AI文档生成创新方案 【免费下载链接】deepwiki-open Open Source DeepWiki: AI-Powered Wiki Generator for GitHub Repositories 项目地址: https://gitcode.com/gh_mirrors/de/deepwiki-open 在企业级软件开发中&…...
连续使用 OpenClaw 50 天后,我总结了 3 个核心工作流和 5 个血泪教训
🔥 连续使用 OpenClaw 50 天后,我总结了 3 个核心工作流和 5 个血泪教训AI 不会取代你,但会用 AI 的人会取代你——这句话说烂了,但 50 天后我才真正明白它的意思。01 上周五下午 5 点,同事都在加班,我先走…...
如何用Real-ESRGAN-ncnn-vulkan解决5种常见的图像质量问题?
如何用Real-ESRGAN-ncnn-vulkan解决5种常见的图像质量问题? 【免费下载链接】Real-ESRGAN-ncnn-vulkan NCNN implementation of Real-ESRGAN. Real-ESRGAN aims at developing Practical Algorithms for General Image Restoration. 项目地址: https://gitcode.co…...
AML启动器:智能管理XCOM 2模组的一站式解决方案
AML启动器:智能管理XCOM 2模组的一站式解决方案 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom…...
告别黑盒操作:详解mmc_utils在Android设备上的20+个实用命令(从extcsd读到RPMB写)
eMMC深度操作指南:解锁mmc-utils的20个高阶应用场景 当你的Android设备出现存储性能下降、分区异常或安全验证需求时,系统自带的工具往往束手无策。此时,一个被低估的神器mmc-utils正躺在Linux内核源码树中等待被唤醒——它不仅能够读取eMMC芯…...
FlowState Lab新手避坑指南:快速上手时间序列预测的5个技巧
FlowState Lab新手避坑指南:快速上手时间序列预测的5个技巧 1. 环境准备与快速部署 1.1 系统要求与安装步骤 FlowState Lab作为基于IBM Granite架构的时间序列分析工具,对运行环境有以下要求: 操作系统:Linux (推荐Ubuntu 20.…...
XUnity.AutoTranslator游戏翻译解决方案:从入门到精通的实战指南
XUnity.AutoTranslator游戏翻译解决方案:从入门到精通的实战指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾因语言障碍错失优秀的Unity游戏体验?面对满屏外文界面感到…...
AI系统-23AI芯片CPU子系统介绍
AI SoC中有很多异构核,围绕着这些异构核产生了很多子系统之前也介绍过:AI系统-16AI SoC推理芯片架构介绍。 这里面的老大哥毫无疑问就是CPU子系统,尽管其他AI子系统特别是NPU,是干活的主力,但是头把交椅还得资格最老的CPU来坐&am…...
Qwen3-VL-8B-Instruct-GGUF效果分享:100张用户实测图平均响应时间<1.8s(A10 GPU)
Qwen3-VL-8B-Instruct-GGUF效果分享:100张用户实测图平均响应时间<1.8s(A10 GPU) 1. 模型效果实测:速度与精度的双重惊喜 当我第一次看到Qwen3-VL-8B-Instruct-GGUF的测试结果时,确实被惊艳到了。这个模型在A10 G…...
