当前位置:首页 > 后端开发 > springcloud gateway 整合swagger3.0.0

springcloud gateway 整合swagger3.0.0

6个月前 (05-20)49

版本和说明

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

单应用

pom添加

<!-- 3.0版本只需要引入一个,不再像2.x版本需要引入两个包 -->
<dependency>
	<groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>${swagger.version}</version>
</dependency>

配置文件

/**
 * swagger配制
 *
 * @author teler
 * @date 2020-12-30
 */
@Configuration
public class SwaggerConfig {
     

	@Value("${swagger.enable:true}")
	private Boolean enable;

	@Bean
	public 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());
	}


	/**
	 * API 页面上半部分展示信息
	 */
	private ApiInfo apiInfo() {
     
		return new ApiInfoBuilder()
				       .title("接口文档")
				       .description("@author Teler")
				       .contact(new Contact("Teler", null, "teler96@qq.com"))
				       .version("1.0")
				       .build();
	}

	/**
	 * 设置接口单独的授权信息
	 */
	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()
		);
	}

	@SafeVarargs
	private final <T> Set<T> newHashSet(T... ts) {
     
		if (ts.length > 0) {
     
			return new LinkedHashSet<>(Arrays.asList(ts));
		}
		return null;
	}
}


访问

到这一步我们应该就能正常访问swagger文档了,但是要注意3.0的访问页面路径有所变化

http://ip:port/swagger-ui/

页面

springcloud gateway 整合swagger3.0.0 _ Java侠


微服务

  • gateway版本:2.2.5

添加文件

MySwaggerResourcesProvider在gateway模块中创建,注意其中的一些注解和说明,否则应用无法正常启动

MySwaggerResourcesProvider

@Primary这个注解是告诉spring 如果有冲突优先使用当前类 没有这个会报实现类冲突 看源码能发现SwaggerResourcesProvider已经有一个InMemorySwaggerResourcesProvider实现类 但是自带的不能满足我们的要求

/**
 * swagger的配置类
 *
 * @author teler
 */
@Component
@Primary
public class MySwaggerResourcesProvider implements SwaggerResourcesProvider {
     

	/**
	 * swagger3默认的url后缀
	 */
	private static final String SWAGGER2URL = "/v3/api-docs";
	/**
	 * 网关路由
	 */
	private final RouteLocator routeLocator;

	/**
	 * 网关应用名称
	 */
	@Value("${spring.application.name}")
	private String self;

	@Autowired
	public MySwaggerResourcesProvider(RouteLocator routeLocator) {
     
		this.routeLocator = routeLocator;
	}

	/**
	 * 对于gateway来说这块比较重要 让swagger能找到对应的服务
	 *
	 * @return
	 */
	@Override
	public List<SwaggerResource> get() {
     
		List<SwaggerResource> resources = new ArrayList<>();
		List<String> routeHosts = new ArrayList<>();
		// 获取所有可用的host:serviceId
		routeLocator.getRoutes().filter(route -> route.getUri().getHost() != null)
				.filter(route -> !self.equals(route.getUri().getHost()))
				.subscribe(route -> routeHosts.add(route.getUri().getHost()));

		// 记录已经添加过的server
		Set<String> dealed = new HashSet<>();
		routeHosts.forEach(instance -> {
     
			// 拼接url
			String 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;
	}
}

访问

链接不变,但是我们在右上角能清晰地看到所有的微服务模块已经能正常访问了
springcloud gateway 整合swagger3.0.0 _ Java侠

未解决

找不到中文包的设置方式,虽然说都能看得懂,但是还是想能自己设置语言。

作者:懵懂学子
来源链接:https://blog.csdn.net/tutian2000/article/details/111993949

标签: Gateway

“springcloud gateway 整合swagger3.0.0” 的相关文章

九、Spring Cloud 微服务之 Gateway

九、Spring Cloud 微服务之 Gateway

文章目录 Gateway 新一代网关 1. 概述简介...

gateway搭配nacos进行路由转发并配置跨域

先上nacos和gateway需要的POM <!--SpringCloud ailibaba nacos --> <depe...

SpringCloud--组件--Gateway(网关)

SpringCloud--组件--Gateway(网关)

Gateway网关 Gateway-概述 网关旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。 在微服务架构...

spring gateway 笔记

spring gateway 笔记

  目录 路由定义 配置路由谓词 配置路由过滤器 自定义全局过滤器 自定义全局异常处理器 http请求超时配置 跨域...

SpringCloud——Gateway(服务网关的学习和使用)

SpringCloud——Gateway(服务网关的学习和使用)

什么是Spring Cloud Gateway Spring Cloud Gateway不仅提供了统一的路由方式,并且还基于Filter链的方...

Gateway实战:SpringCloud-Gateway组件使用

Gateway实战:SpringCloud-Gateway组件使用

1.什么是服务网关 1.说明 网关统一服务入口,可方便实现对平台众多服务...

tp5.1整合gateway

tp5.1整合gateway

1、安装think-gateway:composer require evan-li/think-gateway 2、项目新建应用(eg:application/wor...

springcloud gateway网关多路由配置访问404解决方案

首先说说我遇到的情况,我是在gateway网关服务中配置了3个路由分别访问到不同的模块,然而第一个配置的路由可以正常访问,之后添加2个路由一直是40...

微服务网关(gateway)概述 与 嵌入式 Zuul 反向代理

微服务网关(gateway)概述 与 嵌入式 Zuul 反向代理

目录 微服务网关 gateway 概述 路由器网关 Zuul 概述 嵌入式 Zuul 反向代理 ignored-services 不代理指定服务...

Gateway + Oauth2 + Security认证与授权 [更新中]

Gateway + Oauth2 + Security认证与授权 [更新中]

Gateway + Oauth2 + Security认证与授权 讲道理,Security是目前知道的框架中最难掌握的一个框架,我接下来的学习目标都将围绕它而展开,...