springcloud 整合swagger文档教程

我用的是nacos和gateway

我的模块

父依赖没什么太大关系如果出现版本冲突问题可用参考我的依赖版本
 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.heima</groupId><artifactId>dataFactory</artifactId><packaging>pom</packaging><version>1.0.0</version><modules><module>apiService</module><module>databaseService</module><module>codeService</module><module>dataAssetService</module><module>dataStandardService</module><module>accountService</module><module>cloud-getway</module><module>cloud-swwager</module><module>cloud-common</module><module>cloud-api</module></modules><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.12</version><relativePath/></parent><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><org.projectlombok.version>1.18.20</org.projectlombok.version><spring-cloud.version>2021.0.3</spring-cloud.version><spring-cloud-alibaba.version>2021.0.4.0</spring-cloud-alibaba.version><mybatis-plus.version>3.4.3</mybatis-plus.version><hutool.version>5.8.10</hutool.version><mysql.version>8.0.23</mysql.version><jjwt.version>0.9.1</jjwt.version><nimbus-jose-jwt.version>9.8.1</nimbus-jose-jwt.version></properties><!-- 对依赖包进行管理 --><dependencyManagement><dependencies><!--spring cloud--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!--spring cloud alibaba--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency><!-- 数据库驱动包管理 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!-- mybatis plus 管理 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version></dependency><!--hutool工具包--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>${hutool.version}</version></dependency><!-- jwt --><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>${jjwt.version}</version></dependency><dependency><groupId>com.nimbusds</groupId><artifactId>nimbus-jose-jwt</artifactId><version>${nimbus-jose-jwt.version}</version></dependency>
<!--            <dependency>-->
<!--                <groupId>org.reflections</groupId>-->
<!--                <artifactId>reflections</artifactId>-->
<!--               <version>0.9.12</version>-->
<!--            </dependency>--></dependencies></dependencyManagement><dependencies><!-- lombok 管理 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${org.projectlombok.version}</version></dependency><!--单元测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>11</source> <!-- depending on your project --><target>11</target> <!-- depending on your project --></configuration></plugin></plugins></pluginManagement></build>
</project>

开始配置以我的code模块为例

加入swagger依赖

  <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>3.0.0</version></dependency><!-- 为Spring Boot应用程序提供Swagger UI,用于可视化展示和测试Swagger API文档 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</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>

和两个配置类

package com.cqie.conf;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
//import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;import java.util.*;@ComponentScan
@Configuration
@EnableSwagger2
@Profile(value = {"dev","test"})
public class SwaggerAutoCofniguration {@Autowiredprivate SwaggerProperties properties;//配置了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(properties.getBasePackage()))//paths()过滤什么路径.paths(PathSelectors.any()).build().protocols(set)// 支持的通讯协议集合.securitySchemes(securitySchemes())// 授权信息设置,必要的header token等认证信息.securityContexts(securityContexts());// 授权信息全局应用}//配置Swagger 信息 = ApiInfoprivate ApiInfo apiInfo(){//作者信息Contact contact = new Contact(properties.getAuthor().getName(),properties.getAuthor().getUrl(),properties.getAuthor().getEmail());return new ApiInfo(properties.getApiInfo().getTitle(),properties.getApiInfo().getDescription(),properties.getApiInfo().getVersion(),properties.getApiInfo().getTermsOfServiceUrl(),contact,properties.getApiInfo().getLicense(),properties.getApiInfo().getLicenseUrl(),new ArrayList<>());}/*** 设置授权信息*/private List<SecurityScheme> securitySchemes(){List<ApiKey> result = new ArrayList<>();//添加OAuth2的令牌认证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());}}
package com.cqie.conf;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.stereotype.Component;@Data
@ConfigurationProperties(prefix = SwaggerProperties.PREFIX)
@Component
@EnableConfigurationProperties
public class SwaggerProperties {public static final String PREFIX="spring.swagger";//包private String basePackage;//作者相关信息private Author author;//API的相关信息private ApiInfo apiInfo;@Datapublic static class ApiInfo{String title;String description;String version;String termsOfServiceUrl;String license;String licenseUrl;}@Datapublic static class Author{private String name;private String email;private String url;}
}

其他的是你自己模块中的spring-boot-starter依赖等

然后再该模块的启动类上加 

@EnableSwagger2 注解

我的

pom依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.heima</groupId><artifactId>dataFactory</artifactId><version>1.0.0</version></parent><groupId>org.cqie</groupId><artifactId>codeService</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!--        &lt;!&ndash;Swagger相关&ndash;&gt;-->
<!--        <dependency>-->
<!--            <groupId>io.springfox</groupId>-->
<!--            <artifactId>springfox-swagger2</artifactId>-->
<!--        </dependency>-->
<!--        <dependency>-->
<!--            <groupId>io.springfox</groupId>-->
<!--            <artifactId>springfox-swagger-ui</artifactId>-->
<!--        </dependency>--><dependency><groupId>com.heima</groupId><artifactId>cloud-swwager</artifactId><version>1.0.0</version></dependency><dependency><groupId>com.heima</groupId><artifactId>cloud-common</artifactId><version>1.0.0</version></dependency></dependencies><build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

 我是将swagger单独作为一个模块后面会说到

我的启动类

其他的就看你自己的需求了

我的yml文件

server:port: 8081servlet:context-path: /code
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplspring:application:name: service-codecloud:nacos:server-addr: 自己nacosip:8848
#      discovery:
#        server-adder: ${spring.cloud.nachos.server-adder}
#        password: cqhlglnacos
#        username: nacos# mysqldatasource:username: data_factorypassword: data_factoryurl: jdbc:mysql://数据库ip:3306/data_factory?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true&useSSL=false&useLegacyDatetimeCode=falsedriver-class-name: com.mysql.cj.jdbc.Driverswagger:basePackage: com.cqie.controllerauthor:name: xxxxemail: @qq.comurl:apiInfo:title: 码表管理模块description: 码表相关的接口version: 1.0termsOfServiceUrl: http://ip:${server.port}/${spring.application.name}license: licenselicenseUrl: licenseUrlprofiles:active: dev

主要的地方是

servlet:context-path: 自己写一个项目名字
application:name: 自己的应用程序名称 要是 任意一个名称-上面项目名称 (最好小写)
swagger:basePackage: 标注你controller的位置

其他的没太多要求

然后运行该模块浏览器访问localhost:8081/code/v2/api-docs(就是ip:该项目端口号/项目名字/v2/api-docs)

像我这样出现数据就行了(有数据不报错就行不用和我一样)

 然后网关配置

依赖xml

除了你自己的一些依赖加上swagger依赖

            <!-- 用于在Spring Boot应用程序中生成和展示Swagger API文档 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>3.0.0</version></dependency><!-- 为Spring Boot应用程序提供Swagger UI,用于可视化展示和测试Swagger API文档 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</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>

然后加入配置类

package com.cqie.conf;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import springfox.documentation.swagger.web.SwaggerResource;
import springfox.documentation.swagger.web.SwaggerResourcesProvider;
import springfox.documentation.swagger2.annotations.EnableSwagger2;import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;/*** 网关的swagger的配置类*/
@Component
@Primary
public class GatewaySwaggerResourcesProvider implements SwaggerResourcesProvider {/*** swagger3默认的url后缀*/private static final String SWAGGER2URL = "/v2/api-docs";/*** 网关路由*/@Autowiredprivate  RouteLocator routeLocator;/*** 网关应用名称*/@Value("${spring.application.name}")private String self;/*** 对于gateway来说这块比较重要 让swagger能找到对应的服务*/@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 -> {String url=null;// 拼接urlif (instance.contains("-")) {url = "/" + instance.toLowerCase().split("-")[1] + SWAGGER2URL;}System.out.println("url = " + url);if (!dealed.contains(url)) {dealed.add(url);SwaggerResource swaggerResource = new SwaggerResource();swaggerResource.setUrl(url);swaggerResource.setName(instance);resources.add(swaggerResource);}});return resources;}
}

再加上上面模块的配置类就是这两个

也可以像我这样建一个swagger模块放这两个配置类

getaway引入就行了

他的xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>dataFactory</artifactId><groupId>com.heima</groupId><version>1.0.0</version></parent><modelVersion>4.0.0</modelVersion><artifactId>cloud-getway</artifactId><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId><version>3.1.3</version></dependency><!-- 端点监控 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!--  nacos注册中⼼--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.heima</groupId><artifactId>cloud-swwager</artifactId><version>1.0.0</version></dependency><!-- 用于在Spring Boot应用程序中生成和展示Swagger API文档 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>3.0.0</version></dependency><!-- 为Spring Boot应用程序提供Swagger UI,用于可视化展示和测试Swagger API文档 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</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>
<!--      <dependency>-->
<!--          <groupId>io.springfox</groupId>-->
<!--          &lt;!&ndash;提供了使用Swagger和OpenAPI规范创建API文档的支持。&ndash;&gt;-->
<!--          <artifactId>springfox-boot-starter</artifactId>-->
<!--          <version>3.0.0</version>-->
<!--      </dependency>--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId></dependency><dependency><groupId>org.reflections</groupId><artifactId>reflections</artifactId><version>0.9.11</version></dependency></dependencies><build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

 而下面这个配置类只有网关加

 

网关yml

我的yml

spring:application:name: cloud-getwaycloud:nacos:discovery:server-addr: 自己nacosip:8848
#        password: cqhlglnacos
#        username: nacosgateway:discovery:locator:enabled: truelower-case-service-id: trueroutes:- id: service-codeuri: lb://service-codepredicates:- Path=/code/**- id: service-apiuri: lb://service-apipredicates:- Path=/api/**- id: service-databaseuri: lb://service-databasepredicates:- Path=/database/**- id: service-accounturi: lb://service-accountpredicates:- Path=/account/**- id: service-standarduri: lb://service-standardpredicates:- Path=/standard/**- id: service-asseturi: lb://service-assetpredicates:- Path=/asset/**
#          filters:
###            - RewritePath=/code/(?<segment>.*),/$\{segment} # 将请求路径重写为实际的服务路径
#            - StripPrefix=1 # 剥离路径swagger:basePackage: com.cqie.controllerauthor:name: xxxxemail: xxx@qq.comurl:apiInfo:title: 网关模块description: 网关version: 1.0termsOfServiceUrl: http://ip:${server.port}/${spring.application.name}license: license2licenseUrl: licenseUrl2profiles:active: dev#          filters:# 前缀过滤,默认配置下,我们的请求路径是 http://localhost:8888/business-oauth2/** 这时会路由到指定的服务# 此处配置去掉 1 个路径前缀,再配置上面的 Path=/api/**,就能按照 http://localhost:8888/api/** 的方式访问了
#            - StripPrefix=1 # 剥离路径
#        - id: swagger_route
#          uri: http://localhost:8090
#          predicates:
#            - Path=/swagger-ui/**
#          filters:
#            - RewritePath=/swagger-ui/(?<segment>.*),/$\{segment}
#        - id: global_swagger_route
#          uri: http://localhost:8090
#          predicates:
#            - Path=/global-swagger-ui/**
#          filters:
#            - RewritePath=/global-swagger-ui/(?<segment>.*),/$\{segment}
server:#gateway的端⼝port: 8090

 网关启动类

运行gateway 浏览器访问
ip:网关端口号/dochtml

就可以访问了

像这样多配置几个服务模块就行了点击进行切换

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

claude国内无法使用的解决办法

claude3国内如何使用, claude国内无法使用的解决办法来啦&#xff01; 近日&#xff0c;人工智能公司AnthropicAI推出了全新的大语言模型Claude 3系列&#xff0c;其中最强大的版本Claude 3 Opus据称在性能上全面超越了OpenAI的GPT-4模型。Claude 3系列包括三个版本&#xff1…

金融科技领航者 财源滚滚选股软件助力投资者智赢未来

在波澜壮阔的金融科技浪潮中&#xff0c;河北源达凭借深厚的行业积淀与前瞻的创新思维&#xff0c;逐渐崭露头角&#xff0c;成为业界瞩目的领航者。多年来&#xff0c;公司始终坚守初心&#xff0c;致力于为客户提供高效、的金融科技服务&#xff0c;助力投资者在资本市场中稳…

OpenCV与AI深度学习 | 实战 | 基于YOLOv9+SAM实现动态目标检测和分割(步骤 + 代码)

本文来源公众号“OpenCV与AI深度学习”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;实战 | 基于YOLOv9SAM实现动态目标检测和分割&#xff08;步骤 代码&#xff09; 0 导 读 本文主要介绍基于YOLOv9SAM实现动态目标检测和分…

每日两题 / 76. 最小覆盖子串 239. 滑动窗口最大值(LeetCode热题100)

76. 最小覆盖子串 - 力扣&#xff08;LeetCode&#xff09; 类似双指针&#xff08;滑动窗口&#xff09;&#xff0c;一开始l和r指向0下标&#xff0c;当区间[l, r)之间的字符串无法覆盖t串时&#xff0c;r。直到区间覆盖了t串 接着移动l指针&#xff0c;假设当前区间为[l …

毕设学习:联邦学习梯度聚合加密算法

原本的加密算法大致思路&#xff1a;各个客户端上传梯度时进行加密&#xff0c;服务端直接用有扰乱的梯度当成真梯度来计算&#xff0c;这样一来谁也不知道谁是真梯度 为了避免原本的算法的一些问题&#xff0c;本文提出了加密-解密结构&#xff0c;并证明了这种结构带来的误差…

光伏电站智能勘探:无人机优势及流程详解

随着科技和互联网技术的不断发展&#xff0c;无人机在各个领域的应用越来越广泛&#xff0c;其中之一就是光伏电站智能勘探。利用无人机高清摄像头和传感器等设备&#xff0c;可以对光伏电站周边环境、日照情况、房屋状态进行全方面的勘探和记录&#xff0c;搭配卫星勘探、实地…

掌上医院预约挂号系统源码,开发技术:C#+uni-app+.net+SqlServer

医院微信预约挂号系统是一种基于微信平台的医疗服务系统&#xff0c;它利用微信的广泛覆盖和便捷性&#xff0c;为患者提供线上预约挂号的服务。通过该系统&#xff0c;患者可以使用自己的微信账号登录&#xff0c;浏览医院的医生排班信息&#xff0c;选择合适的医生和就诊时间…

【Python】异常处理结构

文章目录 1.python异常2.try_except异常处理结构3.try... 多个except异常处理4.try_except_else异常处理结构5.try_except_finally异常处理结构6.常见报错类型 在运行代码时&#xff0c;总是遇到各种异常&#xff0c;且出现异常时&#xff0c;脚本就会自动的的停止运行&#xf…

野生动物保护视频AI智能监管方案,撑起智能保护伞,守护野生动物

一、背景 在当今世界&#xff0c;野生动物保护已经成为全球性的重要议题。然而&#xff0c;由于野生动物生存环境的不断恶化以及非法狩猎等活动的盛行&#xff0c;保护野生动物变得尤为迫切。为了更有效地保护野生动物&#xff0c;利用视频智能监管技术成为一种可行的方案。 …

2024年在Vim中开发vue2+java

neovim 0.5刚出来的时代&#xff0c;那时刚有lua插件我很狂热。每天沉迷于打造自己的IDE之中。写过一堆相关的博客&#xff0c;也录过一些视频教程。后来发现neovim的接口和插件更新的很快&#xff0c;导致配置文件要不定期的修改&#xff0c;才能保证新版本的插件的适配。我也…

案例实践 | InterMat:基于长安链的材料数据发现与共享系统

案例名称&#xff1a;InterMat-基于区块链的材料数据发现与共享系统 ■ 建设单位 北京钢研新材科技有限公司 ■ 用户群体 材料数据上下游单位 ■ 应用成效 已建设10共识节点、50轻节点&#xff0c;1万注册用户 案例背景 材料是构成各种装备和工程的物质载体&#xff0c…

bootstrap-select 搜索过滤输入中文问题,前2个字母输入转成空格

bootstrap是v3.3.7的 v1.6.3版本的bootstrap-select,注释以下2行 //that.$menu.find(li).filter(:visible:not(.divider)).eq(0).addClass(active).find(a).focus(); // $(this).focus();