继承SpringDoc文档,并只在开发环境展示
我选择的是自动注入方式,好处就是不需要在配置文件一个个去配置 yaml配置
spring: ‘cloud: gateway: discovery: locator: enabled: true
代码
依赖
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> <version>3.1.1</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>3.1.1</version> </dependency> <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-webflux-ui</artifactId> <version>1.6.9</version> </dependency> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-springdoc-ui</artifactId> <version>3.0.3</version> </dependency> </dependencies>
注意:
env需要工程能区分出来dev和test等等环境 下面这段代码放在网关模块里
import com.eoi.goblin.common.utils.EmptyUtil; import org.springdoc.core.AbstractSwaggerUiConfigProperties; import org.springdoc.core.SwaggerUiConfigProperties; import org.springframework.cloud.gateway.route.RouteDefinition; import org.springframework.cloud.gateway.route.RouteDefinitionLocator; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import javax.annotation.PostConstruct; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; /** * springdoc配置 * * @author HuangJunHao * @since 2022/10/12 */ @Configuration public class SpringDocConfig { protected final SwaggerUiConfigProperties swaggerUiConfigProperties; protected final RouteDefinitionLocator routeDefinitionLocator; protected final Environment env; public SpringDocConfig(SwaggerUiConfigProperties swaggerUiConfigProperties, RouteDefinitionLocator routeDefinitionLocator, Environment env) { this.swaggerUiConfigProperties = swaggerUiConfigProperties; this.routeDefinitionLocator = routeDefinitionLocator; this.env = env; } @PostConstruct public void autoInitSwaggerUrls() { String[] activeProfiles = env.getActiveProfiles(); //只有dev环境才加载doc文档 if (EmptyUtil.notEmpty(activeProfiles) && "dev".equals(activeProfiles[0])) { List<RouteDefinition> definitions = routeDefinitionLocator.getRouteDefinitions().collectList().block(); definitions.stream().forEach(routeDefinition -> { AbstractSwaggerUiConfigProperties.SwaggerUrl swaggerUrl = new AbstractSwaggerUiConfigProperties.SwaggerUrl( routeDefinition.getId().replace("ReactiveCompositeDiscoveryClient_", "").toLowerCase(), routeDefinition.getUri().toString().replace("lb://", "").toLowerCase() + "/v3/api-docs", "" ); Set<AbstractSwaggerUiConfigProperties.SwaggerUrl> urls = swaggerUiConfigProperties.getUrls(); if (urls == null) { urls = new LinkedHashSet<>(); swaggerUiConfigProperties.setUrls(urls); } urls.add(swaggerUrl); }); } } }
不是dev访问的就是如下效果
访问路径
http://gateway-host/doc.html
gateway-host:网关的地址
我的是:http://localhost:8080/doc.html#/home