一、依赖

         <!--swagger--><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency><!--swagger-ui  这里是用了一个好看一点ui界面--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>swagger-bootstrap-ui</artifactId><version>1.9.6</version></dependency>

每一个微服务和 gateway都要这个依赖

微服务 的swagger配置

第一个版本

/*** 文件名: SwaggerConfig* 创建者: 友* 创建日期: 2021/1/25 11:00* 邮箱: 1738743304.com !* 描述: TODO*/
@Configuration
public class SwaggerConfig {@Value("${swagger.enable:true}")private Boolean enable;@Beanpublic Docket api() {return new Docket(DocumentationType.OAS_30)//资源.globalResponses(HttpMethod.GET, new ArrayList<>()).globalResponses(HttpMethod.PUT, new ArrayList<>()).globalResponses(HttpMethod.POST, new ArrayList<>()).globalResponses(HttpMethod.DELETE, new ArrayList<>())//是否启动.enable(enable)//头部信息.apiInfo(apiInfo()).select()/*** RequestHandlerSelectors,配置要扫描接口的方式* basePackage指定要扫描的包* any()扫描所有,项目中的所有接口都会被扫描到* none()不扫描* withClassAnnotation()扫描类上的注解* withMethodAnnotation()扫描方法上的注解*/.apis(RequestHandlerSelectors.any())//过滤某个路径.paths(PathSelectors.any()).build()//协议.protocols(newHashSet("https", "http")).securitySchemes(securitySchemes()).securityContexts(securityContexts());}//配置Swagger 信息 = ApiInfoprivate ApiInfo apiInfo(){return new ApiInfo("小唐的Api文档","好好看文档","1.0","xiaotangstudio.cn",contact,"Apache 2.0","http://www.apache.org/licenses/LICENSE-2.0",new ArrayList<>());}/*** 设置接口单独的授权信息*/private List<SecurityScheme> securitySchemes() {return Collections.singletonList(new ApiKey("BASE_TOKEN", "token", "header"));}/*** 授权信息全局应用*/private List<SecurityContext> securityContexts() {return Collections.singletonList(SecurityContext.builder().securityReferences(Collections.singletonList(new SecurityReference("BASE_TOKEN",new AuthorizationScope[]{new AuthorizationScope("global", "")})))//.forPaths(PathSelectors.any()).build());}@SafeVarargsprivate final <T> Set<T> newHashSet(T... ts) {if (ts.length > 0) {return new LinkedHashSet<>(Arrays.asList(ts));}return null;}
}

第二个版本 (要使用ui时推荐用这个)

@Configurationpublic class SwaggerConfig implements WebMvcConfigurer {//配置了Swagger的Docket的bean实例//enable是否启动swagger,如果为False则Swagger不能在浏览器访问@Beanpublic Docket docket() {Set<String> set = new HashSet<>();set.add("https");set.add("http");return new Docket(DocumentationType.SWAGGER_2).pathMapping("/").enable(true)//定义是否开启swagger,false为关闭,可以通过变量控制// 微信关注开发者技术前线:定义是否开启swagger,false为关闭,可以通过变量控制.apiInfo(apiInfo())//将api的元信息设置为包含在json ResourceListing响应中。.select().apis(RequestHandlerSelectors.basePackage("com.xiaotang.blog"))//paths()过滤什么路径.paths(PathSelectors.any()).build().protocols(set)// 支持的通讯协议集合.securitySchemes(securitySchemes())// 授权信息设置,必要的header token等认证信息.securityContexts(securityContexts());// 授权信息全局应用}//作者信息Contact contact = new Contact("小唐","xiaotangstudio.cn","1738743304@qq.com");//配置Swagger 信息 = ApiInfoprivate ApiInfo apiInfo(){return new ApiInfo("小唐的Api文档","好好看文档","1.0","xiaotangstudio.cn",contact,"Apache 2.0","http://www.apache.org/licenses/LICENSE-2.0",new ArrayList<>());}/*** 设置授权信息*/private List<SecurityScheme> securitySchemes(){List<ApiKey> result = new ArrayList<>();ApiKey apiKey = new ApiKey("Authorization","Authorization" ,"Header" );result.add(apiKey);return  Collections.singletonList(apiKey);}/*** 授权信息全局应用*/private List<SecurityContext> securityContexts() {return Collections.singletonList(SecurityContext.builder().securityReferences(Collections.singletonList(new SecurityReference("Authorization", new AuthorizationScope[]{new AuthorizationScope("global", "Authorization")}))).build());}}

单个微服务 目录结构

gateway 的swagger配置


/*** swagger的配置类** @author teler*/
@Component
@Primary
public class MySwaggerResourcesProvider implements SwaggerResourcesProvider {/*** swagger3默认的url后缀*/private static final String SWAGGER2URL = "/v3/api-docs"; //要使用ui的话 改成v2 不然会出bug  比如有的地方 没有输入框/*** 网关路由*/private final RouteLocator routeLocator;/*** 网关应用名称*/@Value("${spring.application.name}")private String self;@Autowiredpublic MySwaggerResourcesProvider(RouteLocator routeLocator) {this.routeLocator = routeLocator;}/*** 对于gateway来说这块比较重要 让swagger能找到对应的服务** @return*/@Overridepublic List<SwaggerResource> get() {List<SwaggerResource> resources = new ArrayList<>();List<String> routeHosts = new ArrayList<>();// 获取所有可用的host:serviceIdrouteLocator.getRoutes().filter(route -> route.getUri().getHost() != null).filter(route -> !self.equals(route.getUri().getHost())).subscribe(route -> routeHosts.add(route.getUri().getHost()));// 记录已经添加过的serverSet<String> dealed = new HashSet<>();routeHosts.forEach(instance -> {// 拼接urlString url = "/" + instance.toLowerCase() + SWAGGER2URL;if (!dealed.contains(url)) {dealed.add(url);SwaggerResource swaggerResource = new SwaggerResource();swaggerResource.setUrl(url);swaggerResource.setName(instance);resources.add(swaggerResource);}});return resources;}
}

gateway 目录结构

测试访问

两个访问地址 (都是gateway的ip地址和端口 , 我这里端口80 可以不写)

原始ui: http://localhost/swagger-ui/index.html

好看一点的ui:http://localhost/doc.html

步骤总结

1、导入依赖
2、配置每一个微服务的swagger
3、配置gateway的swagger

注意点

1、每一个微服务的swagger 要自测通过
2、使用ui时 记得把gateway的配置改成v2 不然可能没有输入框 ,每一个微服务推荐使用 第二个版本

完整依赖

父依赖

    <!--统一版本号管理--><properties><junit.version>4.13.1</junit.version><lombok.version>1.18.16</lombok.version><log4j.version>1.2.17</log4j.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><!--    总包管理 dependencyManagement--><!--     包管理 dependencies--><dependencyManagement><dependencies><!-- springcloud依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2020.0.0</version><type>pom</type><scope>import</scope></dependency><!-- spring-cloud-alibaba依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.4.RELEASE</version><type>pom</type><scope>import</scope></dependency><!-- springboot依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.4.2</version><type>pom</type><scope>import</scope></dependency><!--===============数据库===============--><!--jdbc--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!-- druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.4</version></dependency><!-- mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version></dependency><!--mybatis-plus 代码生成器依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.3.1.tmp</version></dependency><!--freemarker--><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.30</version></dependency><!--swagger--><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency><!--mybatis SpringBoot 启动器--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency><!--mysql-connector-java--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.22</version></dependency><!--===============日志测试===============--><!-- logback--><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.2.3</version></dependency><!-- junit--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version></dependency><!-- lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency><!-- log4j--><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><!--jjwt --><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency><!--swagger-ui --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>swagger-bootstrap-ui</artifactId><version>1.9.6</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-jwt --><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-jwt</artifactId><version>1.1.1.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework.security.oauth.boot/spring-security-oauth2-autoconfigure --><dependency><groupId>org.springframework.security.oauth.boot</groupId><artifactId>spring-security-oauth2-autoconfigure</artifactId><version>2.4.2</version></dependency></dependencies></dependencyManagement><!--解决资源导出问题--><build><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include><include>**/*.yml</include></includes><filtering>false</filtering></resource></resources></build>

单个微服务依赖

 <dependencies><!--alibaba-nacos--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--fastjson--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.51</version></dependency><!--spring-cloud-starter-oauth2--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-oauth2</artifactId><version>2.2.4.RELEASE</version></dependency><!--spring-security-jwt --><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-jwt</artifactId></dependency><!-- /spring-cloud-starter-security --><!--        <dependency>--><!--            <groupId>org.springframework.cloud</groupId>--><!--            <artifactId>spring-cloud-starter-security</artifactId>--><!--            <version>2.2.4.RELEASE</version>--><!--        </dependency>--><!--==============================================================--><!--redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!--jackson-databind--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency><!--swagger-bootstrap-ui--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>swagger-bootstrap-ui</artifactId><exclusions><exclusion><groupId>org.javassist</groupId><artifactId>javassist</artifactId></exclusion></exclusions></dependency><!--jjwt --><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId></dependency><!--spring-security--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><!--web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--swagger--><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId></dependency><!--freemarker--><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId></dependency><!--mybatis-plus 代码生成器依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId></dependency><!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId></dependency><!--mysql-connector-java--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--log4j--><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId></dependency><!--test--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--热部署工具--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency></dependencies>

gateway依赖

    <dependencies><!--alibaba-nacos--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--gateway--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!--loadbalancer--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency><!--swagger--><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId></dependency><!--swagger-bootstrap-ui--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>swagger-bootstrap-ui</artifactId><exclusions><exclusion><groupId>org.javassist</groupId><artifactId>javassist</artifactId></exclusion></exclusions></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies>

Gateway集成swagger3.0相关推荐

  1. springcloud gateway 整合swagger3.0.0

    版本和说明 swagger:3.0.0 gateway微服务的使用方式和单应用没啥区别,只是多了设置右上角模块的操作. 以下操作基于你已经搭建成功的服务,只讲怎么添加swagger3 单应用 pom添 ...

  2. 从0到1手把手搭建spring cloud alibaba 微服务大型应用框架(十五) swagger篇 : gateway 集成swagger 与 knife4j实现在线api文档并嵌入到自己项目内

    背景 我们日常开发中基本都是协同开发的,当然极个别的项目整体前后端都是一个人开发的,当多人协作时,尤其是前后端人员协同开发时 必然会面临着前端需要了解后端api接口的情况,两个选择,提前设计好文档,然 ...

  3. 实战干货!Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权!

    今天这篇文章介绍一下Spring Cloud Gateway整合OAuth2.0实现认证授权,涉及到的知识点有点多,有不清楚的可以看下陈某的往期文章. 文章目录如下: 微服务认证方案 微服务认证方案目 ...

  4. Swagger3.0官方starter诞生,可以扔掉那些野生starter了

    原创:猿逻辑,欢迎分享,转载请保留出处. Swagger是研发的好帮手,可以减少前后端的很多沟通成本.甚至在一些比较高级的公司,还能减少和测试人员的沟通成本.所以只要一个项目采用了SpringBoot ...

  5. Spring Cloud Gateway 集成Sa-Token

    引言 Hello 大家好,这里是Anyin. 在我之前的文章中,不知道大家有没有发现我的代码都是放在Anyin Cloud这个项目的(欢迎大家点个星星).这个项目我积累了一些我自己平时在工作当中小工具 ...

  6. maven项目集成swagger3生成json和yaml格式的openapi文件

    概述 纯maven项目中集成swagger3,项目中根据swagger3API定义规范定义api接口,通过扫描包路径生成json或yaml格式的文件,可供前端展示使用 pom依赖 <?xml v ...

  7. SpringBoot 集成Swagger3+knife4j

    SpringBoot 集成Swagger3+knife4j 以下代码来自本人真实企业项目摘录 1. 导入SpringFox依赖 <!--Swagger3相关--><dependenc ...

  8. SpringBoot集成swagger3(powernode CD2207)(内含教学视频+源代码)

    SpringBoot集成swagger3(powernode CD2207)(内含教学视频+源代码) 教学视频+源代码下载链接地址:https://download.csdn.net/download ...

  9. 【云原生微服务>SCG网关篇十二】Spring Cloud Gateway集成Sentinel API实现多种限流方式

    文章目录 一.前言 二.Gateway集成Sentinel API 0.集成Sentinel的核心概念 1)GatewayFlowRule 和 ApiDefinition 2)GatewayFlowR ...

最新文章

  1. FPGA设计心得(9)基于DDS IP核的任意波形发生器设计
  2. XamarinEssentials教程首选项Preferences判断项目是否存在
  3. Linux下C程序的链接过程
  4. Zookeeper系列四:Zookeeper实现分布式锁、Zookeeper实现配置中心
  5. 今天心情好,一起探讨下《送给大家的200兆SVN代码服务器》怎么管理我们的VS代码?...
  6. .Net Discovery系列之三 深入理解.Net垃圾收集机制(上)
  7. [bzoj1062] [NOI2008]糖果雨
  8. matcaffe训练与测试
  9. 关于小米Ruby15.6笔记本驱动黑苹果博通蓝牙的补充
  10. 四大抓包神器,非常好用
  11. opencv打开网络摄像机实时视频
  12. 形式语言与自动机 Part.5 上下文无关语言与下推自动机(PDA)
  13. 深入浅析Service Workers
  14. C++控制台贪吃蛇小游戏详细教程
  15. 微信回应转错帐被拉黑事件 支付宝:我们比较蠢 没法那么洒脱
  16. newmultipartentity php,使用MultipartEntity图片上传
  17. 单片机毕业设计 stm32火灾报警系统
  18. 如何给php打补丁,CSS_教你快速掌握如何使用“Opatch”打补丁,在实际的工作和学习中,很多 - phpStudy...
  19. iPhoneX安全区域与H5引发的问题(Safe Area)
  20. 全国大学生软件测试开发者测试大赛笔记总结

热门文章

  1. 【xmind 2021-2022,文件丢失-软件异常-历史版本找回】
  2. HTC下一款Android手机即将上市
  3. 『每周译Go』Go 语言中的插件
  4. 「开源之道」适兕:“关起门来搞开源,做不了开源世界的Leader”
  5. 王慧文广发英雄帖:组队拥抱新时代 打造中国OpenAI
  6. 网络安全入门实验04:病毒专杀工具的制作
  7. 算法岗面经总结(映客 )
  8. music_悲催的键盘手
  9. 腾讯Flink实践:实时计算平台Oceanus建设历程
  10. 数据恢复软件(列表)