SpringBoot - SWAGGER3公共模块的抽象集成与使用(三)

3、微服务整合Swagger3.0 - 网关Gateway聚合接口 微服务整合Swagger3.0,在网关Gateway聚合接口 阅读详情

写在前面

用于集成SWAGGER3。
SpringBoot - Swagger2的集成与使用(一)
SpringBoot - SWAGGER2公共模块的抽象集成与使用(二)

操作步骤

1. 创建一个单独的模块(servicex-common-swagger3)
2. 在该模块中引入依赖
<!-- Swagger -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
</dependency>
3. 自定义SWAGGER3注解
4. 创建自动装配SWAGGER3的对象
/**
 * 自动装配SWAGGER3
 * @author ROCKY
 */

@Configuration
@EnableOpenApi
@EnableAutoConfiguration
@ConditionalOnProperty(name = "swagger.enabled", matchIfMissing = true)
public class SwaggerAutoConfiguration {

    // 默认的排除路径, 排除SPRING BOOT默认的错误处理路径和端点
    private static final List<String> DEFAULT_EXCLUDE_PATH = Arrays.asList("/error", "/actuator/**");

    private static final String BASE_PATH = "/**";

    @Bean
    @ConditionalOnMissingBean
    public SwaggerProperties swaggerProperties() {
        return new SwaggerProperties();
    }

    @Bean
    public Docket api(SwaggerProperties swaggerProperties) {
        // BASE-PATH的处理
        if (swaggerProperties.getBasePath().isEmpty()) {
            swaggerProperties.getBasePath().add(BASE_PATH);
        }
        // SWAGGER会解析的URL规则的处理, 将配置的需要解析的URL规则放进LIST中
        List<Predicate<String>> basePath = new ArrayList<Predicate<String>>();
        swaggerProperties.getBasePath().forEach(path -> basePath.add(PathSelectors.ant(path)));

        // 在BASE-PATH基础上需要排除的URL规则的处理, 将配置的需要排除的URL规则放进LIST中
        if (swaggerProperties.getExcludePath().isEmpty()) {
            swaggerProperties.getExcludePath().addAll(DEFAULT_EXCLUDE_PATH);
        }
        List<Predicate<String>> excludePath = new ArrayList<>();
        swaggerProperties.getExcludePath().forEach(path -> excludePath.add(PathSelectors.ant(path)));

        ApiSelectorBuilder builder = new Docket(DocumentationType.OAS_30)
                .host(swaggerProperties.getHost())
                .apiInfo(apiInfo(swaggerProperties))
                .select()
                .apis(RequestHandlerSelectors.basePackage(swaggerProperties.getBasePackage()));

        swaggerProperties.getBasePath().forEach(p -> builder.paths(PathSelectors.ant(p)));
        swaggerProperties.getExcludePath().forEach(p -> builder.paths(PathSelectors.ant(p).negate()));
        return builder.build().globalRequestParameters(getGlobalOperationParameters()).pathMapping("/");

    }

    private List<RequestParameter> getGlobalOperationParameters() {
        List<RequestParameter> parameters = Arrays.asList(
                new RequestParameterBuilder().name("token").description("令牌").in(ParameterType.HEADER).query(q -> q.model(m -> m.scalarModel(ScalarType.STRING))).build(),
                new RequestParameterBuilder().name("requestId").description("请求ID").in(ParameterType.HEADER).query(q -> q.model(m -> m.scalarModel(ScalarType.STRING))).build(),
                new RequestParameterBuilder().name("Content-Type").description("内容类型").in(ParameterType.HEADER).query(q -> q.model(m -> m.scalarModel(ScalarType.STRING)).defaultValue("application/json")).build()
        );
        return parameters;
    }

    // 文档基本信息
    private ApiInfo apiInfo(SwaggerProperties swaggerProperties) {
        return new ApiInfoBuilder()
                .title(swaggerProperties.getTitle())
                .description(swaggerProperties.getDescription())
                .license(swaggerProperties.getLicense())
                .licenseUrl(swaggerProperties.getLicenseUrl())
                .termsOfServiceUrl(swaggerProperties.getTermsOfServiceUrl())
                .contact(new Contact(swaggerProperties.getContact().getName(),
                                     swaggerProperties.getContact().getUrl(),
                                     swaggerProperties.getContact().getEmail()))
                .version(swaggerProperties.getVersion())
                .build();
    }
}
5. 创建SWAGGER3配置对象
6. 配置场景启动器的加载策略
7. 编译打包…
8. 在线API文档

http://微服务的IP或者LOCALHOST:微服务的端口号/swagger-ui/index.html

9. SWAGGER3资源映射路径
/**
 * SWAGGER3资源映射路径
 * @author ROCKY
 */
@Configuration
public class SwaggerWebConfiguration implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        /** swagger-ui 地址 */
        registry.addResourceHandler("/swagger-ui/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/");
    }
}
10. SWAGGER3在SPRING-BOOT-2.6.x不兼容问题的处理
/**
 * SWAGGER3在SPRING-BOOT-2.6.x 不兼容问题的处理
 * @author ROCKY
 */
@Component
public class SwaggerBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) {
            customizeSpringfoxHandlerMappings(getHandlerMappings(bean));
        }
        return bean;
    }

    private <T extends RequestMappingInfoHandlerMapping> void customizeSpringfoxHandlerMappings(List<T> mappings) {
        List<T> copy = mappings.stream().filter(mapping -> mapping.getPatternParser() == null)
                .collect(Collectors.toList());
        mappings.clear();
        mappings.addAll(copy);
    }

    @SuppressWarnings("unchecked")
    private List<RequestMappingInfoHandlerMapping> getHandlerMappings(Object bean) {
        try {
            Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings");
            field.setAccessible(true);
            return (List<RequestMappingInfoHandlerMapping>) field.get(bean);
        } catch (IllegalArgumentException | IllegalAccessException e) {
            throw new IllegalStateException(e);
        }
    }
}

注意

在上面的步骤中如果没有具体操作,请参照前面的博文:
SpringBoot - SWAGGER2公共模块的抽象集成与使用(二)

目录结构

在这里插入图片描述

【全网最新-首发】Springfox 3.0.0(包含springfox-swagger2-3.0.0)即OpenAPI 3的发布与系统集成 [原创] SpringFox 3.0.0(包含springfox-swagger2-3.0.0)的发布与系统集成一. SpringFox 3.0.0 发布A. 此版本的亮点B. 兼容性说明C. 此版本已修补的漏洞二. 系统如何集成?A. swagger2-3.0 maven依赖加入,非常方便,只需一个B. swagger2-3.0配置代码,通用型C. 系统启动效果展示D. 切换成bootstrap-ui 一. SpringFox 3.0.0 发布 SpringFox 3.0.0 发布了,SpringFox 阅读详情

相关推荐

关于爱思唯尔官方Latex模版参考文献不是按照引用顺序编号,乱序问题

接下来使用工具打开cas-model2-names.bst文件,全词匹配搜索。其他期刊的模版也是一样的操作,把规定序号的规则的。爱思唯尔给的Latex模版大概文件结构如此。发现是按照第一作者的姓氏的大写字母排序。命令行给注释掉,小写的sort可别注释。

weixin_42748439的博客 5114

springboot 集成 Swagger3(速通)

一杯奶茶的时间学会使用springboot集成swagger3

m0_54355172的博客 5650

STM32CubeMX平台F4系列固件下载核心要点

详解STM32CubeMX平台下F4系列单片机的固件包下载方法与常见问题,重点讲解stm32cubemx固件包下载流程及配置技巧,帮助开发者快速完成开发环境搭建。

weixin_42575505的博客 896

Java实战:Spring Boot集成Swagger3

本文将详细介绍如何在Spring Boot应用程序中集成Swagger3,以构建现代化的RESTful API文档

oandy0的博客 7886

编译CycloneDDS和CycloneDDS-CXX踩过的坑——CMake Error at CMakeLists.txt:227 (find_package):

最近编译CycloneDDS和CycloneDDS-CXX踩了两个坑,花了不少时间。做个简单的记录,免得以后又踩到。注意:CycloneDDS-CXX编译依赖CycloneDDS,因此必须先编译CycloneDDS需要严格按照步骤进行,否则要入坑步骤如下,1先编译CycloneDDS以上步骤完成CycloneDDS的编译和安装,生成的bin include lib等位于install目录下面。

usstmiracle的博客 1900

Cadence Allegro 17.4学习记录开始02-原理图Capture CIS 17.4

Allegro的第一方网表与第三方网表有以下几个区别点;Ø 与Allegro实现交互式操作的是第一方网表,第三方网表时不可以实现交互式操作;Ø 第三方网表不能将器件的Value属性导入到PCB中,输出时以封装属性来代替Value属性,第一方网表是可以的;Ø 网表导入到PCB中时,第三方的网表需要指定事先指定好PCB封装库文件,并产生Device文件,才可以将网表导入到PCB中,第一方网表则可以直接导入。

qq_31444421的博客 1万+

Springboot集成Swagger3详细操作步骤

目录 1、添加依赖 2、添加配置文件resources\config\swagger.properties 3、编写Swagger3Config配置类 4、编写Ctronller类 5、启动访问地址: 6、Swagger3常用注解说明 1、添加依赖 <!-- 引入swagger3包 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springf

zhanhjxxx的博客 1万+

SolidWorks有限元分析流程

对于很多专业,在进行设计完成后,为了缩短开发周期,往往需要配合仿真结果进行,机械行业更是如此。平时大家多采用专业有限元仿真软件进行仿真分析,如ANSYS;不过SolidWorks软件因为制图简单,同时存在专用的有限元仿真模块Simulation,对于初学者往往更加适用,下面简单介绍下SolidWorks Simulation仿真流程。 1. 分析流程 关键步骤如下: **(1)创建算例;**对模型的每次分析都是一个算例,一个模型可以包含多个算例。 **(2)应用材料;**指定模型的材料属性,如铝合金、钢材等

DYH_BK的博客 3万+

Swagger学习(三)之SpringBoot集成Swagger3

SpringBoot整合Swagger3

weixin_53998054的博客 8268

《Python Web项目集锦》-专栏介绍和目录

本专栏专注于Python Web项目,涉及内容包含FastAPI、Django、Flask等,所有项目代码完整且可直接运行。不管是零基础还是有经验的开发,相信都能从本专栏获益。有任何问题欢迎私聊博主,专栏持续更新中...

数据知道的博客 5216

基于matlab的CNN食物识别分类系统,matlab深度学习分类,训练+数据集+界面

饮食在人们的日常生活、营养与医疗建议以及运动员等专业人士的训练上起着越来越重要的作用。随着互联网的发展和医学的进步,人们普遍上传分享和记录的食物图像形成了非常多的数据库,为了改善饮食结构,塑造更健康的生活方式,分析食物的种类、热量和进食时间成为了营养学上非常重要的研究方法,本文的使用深度学习算法可以根据用户上传的食物图像自动分析食物种类。深度学习是机器学习领域的一个研究方向。深度学习通过对数据特征的学习将原始数据转化为计算机可以理解的抽象数据,根据学习到的特征,可以对原始数据进行检测或分类。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 4724

SpringBoot - SWAGGER2公共模块的抽象集成与使用(二)

前后端分离的项目中,使用 Swagger2 来构建在线接口文档是必不可少的,如果所有的微服务都配置SWAGGER2的信息太麻烦了,所以接下来一步一步的带着大家构建统一的SWAGGER组件。

记录并分享 756

【本地部署实战】LM Studio深度使用指南:从环境搭建到模型调优

LM Studio通过极简的操作流程和强大的生态兼容性,让本地部署大模型成为可能。随着M4芯片的发布和CUDA 12.0的优化,未来本地化AI开发将迎来新的爆发点。建议开发者关注官方Discord社区(https://discord.gg/lmstudio)获取最新模型支持信息。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 8754

SpringBoot集成Swagger2

SpringBoot集成Swagger2 文章目录SpringBoot集成Swagger2参考资料集成Swagger2SpringBoot继承Swagger2一个简单的demo细化接口内容增加接口描述使用Model格式化输入输出指定相应状态码及结构抽象出通用Model接口分组管理美化界面接口规范项目代码 本文注重实践,理论介绍可自行google。本文将从Swagger2的集成开始,逐步完成一个具...

安澜公子的博客 750

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

springboot集成swagger2,解决访问404问题

现在主流的前后端分离开发,swagger是一个方便后端编写接口文档的开源项目,用于生成、描述、调用和可视化RESTful风格的Web服务。 1、pom引入jar,最新的3.0.0版本会报404,有点Bug,所以选择2.9.2 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <versi

白领说事的专栏 2万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SpringBoot - SWAGGER中配置.pathMapping(“XXXX“)引发的404错误

.pathMapping("/dev-api"),只是一个附加的虚拟的路径,并没有实际映射作用到对应的@RequestMapping的路径上,实际的访问路径依然是去掉请求前缀"/dev-api"的,但是它会作用到生成SWAGGER-DOC里的API路径上,会在API路径的前面拼接上前缀,所以直接访问会报错。在前后端分离架构上,SWAGGER-UI使用iframe方式嵌套,生成的服务地址也是前端暴露的地址端口,然后请求过来时将请求代理到后端的目标地址上,同时前端会去掉请求前缀。

记录并分享 4537

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Swagger 使用总结

文章目录一、初识Swagger二、实战演练2.1 添加依赖2.2 创建Swagger配置类三、 常用注解3.1 类3.2 方法上3.3 方法入参四、拦截器放行五、文档访问地址六、Demo 一、初识Swagger 由于Spring Boot能够快速开发、便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API。而我们构建RESTful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前

ડUN的博客 640

Swagger使用教程及Swagger增强工具knife4j

Swagger使用教程,Swagger增强工具knife4j

忆往昔的博客 3378

Spring Boot + Swagger2 自动生成api接口文档

一、什么是Swagger 由于Spring Boot能够快速开发、便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API。由于存在多终端的情况(移动端,web前端,小程序等),所以我们会抽象出RESTful API并共用一些底层业务代码。 由于接口众多,并且细节复杂,所以催生了一些api框架,Swagger就凭借其使用简单、...

oyc的博客 1万+

springboot中集成swagger

由于Spring Boot能够快速开发、便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API。而我们构建RESTful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端。 这样一来,我们的RESTful API就有可能要面对多个开发人员或多个开发团队:IOS开发、Andr

张肖的博客 1757

SpringBoot集成Swagger

一、swagger简述 Swagger 是一个帮助完善项目文档规范的框架。我们在类上使用提供的注解写注释,swagger可以根据我们写的注释内容生成相应的web页面,展示我们项目中的api文档。同时我们可以直接在页面上直接调用相应的接口。 二、依赖compile("io.springfox:springfox-swagger2:2.7.0") //核心包,提供了注解 compile("io.sp

KimZing的博客 1105

Swagger 3.0

spring-boot和springdoc-swagger整合

m0_64332518的博客 577

基于spring boot和mongodb打造一套完整的权限架构(三)【抽象实现类和swagger的实现】

      在上一节我们已经引入了我们当前工程的所需要的所有的maven依赖,因此本章我们将开始集成swagger2、以及我们抽象实现类的编写,首先大家打开csdn这个工程建好自己相应的包的结构如下所示:            common底下的包主要是用来存放相应的抽象实现类、配置文件、工具类等。            base:主要用于存放抽象实现类,后续我们所有的dao、service、co...

笨鸟不会飞 1万+

Swagger配置(SpringMVC、SpringBoot)

Swagger配置(SpringMVC、SpringBoot) > 微信图片_20170331175130.png" src="http://doc.ws.netease.com/download/attachments/6424199/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20170331175130.png?version=1&modificationDat

jordandandan的专栏 1895
上一篇: SpringBoot - @ConditionalOnProperty注解使用详解
下一篇: SpringCloud - GATEWAY与SWAGGER3的集成与使用
cloneme01
博客等级 码龄20年 2万+粉丝 248原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cloneme01

谢谢您的支持与鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值