解决通过网关访问Swagger后url路径不正确的问题

这篇具有很好参考价值的文章主要介绍了解决通过网关访问Swagger后url路径不正确的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目场景:

Spring Boot集成Swagger


问题描述

本地访问swagger可以正常访问接口url正确,上线后通过网关访问swagger,发现接口的url路径不对。

正常访问,打开swagger地址:http://localhost:8080/test/swagger-ui.html,在swagger上面访问接口:http://localhost:8080/test/interface

通过网关访问,打开swagger地址:http://localhost:8080/gateway/test/swagger-ui.html,在swagger上面访问接口:http://localhost:8080/test/interface

发现问题,接口并没有带上/gateway关键字

原因分析:

打开swagger会发现,basePath的地址是test,通过网关访问也是test,所以要变成/gateway/test才正确


解决方案:

改变basePath的值

1.properties配置文件

# spring boot请求path
server.servlet.context-path = test
# 是否走网关访问swagger,本地调试不走网关,默认false
swagger.isGat = true
# swagger版本
swagger.version=0.0.1
# 是否开启swagger
swagger.enabled = true

2.Swagger配置

package com.test.config;

import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.async.DeferredResult;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.paths.AbstractPathProvider;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
@ConditionalOnProperty(prefix = "swagger", name = "enabled")	//不是false就会加载bean
public class SwaggerConfig {

	//是否走网关访问swagger,本地调试不走网关,默认false
	@Value("${swagger.isGat:false}")
	private Boolean isGat;
	//修改为自己的context-path
	@Value("${server.servlet.context-path}")
	private String contextPath;

	@Value("${swagger.version}")
	private String version;
	
	@Bean
	public Docket createRestApi() {
		return new Docket(DocumentationType.SWAGGER_2)
				//防止走网关swagger访问404,不走网关注释掉
				.pathProvider(new MyPathProvider())
				.genericModelSubstitutes(DeferredResult.class)
				.useDefaultResponseMessages(false)
				.forCodeGeneration(true)
				.pathMapping("/")
				.select() // 选择哪些路径和API会生成document
				.apis(RequestHandlerSelectors.withClassAnnotation(Api.class)) // 根据URL过滤接口
				.paths(PathSelectors.any()) // 对所有路径进行监控    
				.build()
				.apiInfo(getApiInfo());
	}

	private ApiInfo getApiInfo() {
		return new ApiInfoBuilder()
				.title("测试接口文档")
				.description("测试接口文档")
				.version(version)
				.build();
	}

	class MyPathProvider extends AbstractPathProvider {

		@Override
		protected String applicationPath() {
			String pathMapping = "";
			if(isGat){
				pathMapping = "/gateway";
			}
			return pathMapping + contextPath;
		}

		@Override
		protected String getDocumentationPath() {
			return "/";
		}

	}
} 

 文章来源地址https://www.toymoban.com/news/detail-466151.html


关键代码:

//防止走网关swagger访问404,不走网关注释掉
.pathProvider(new MyPathProvider())


class MyPathProvider extends AbstractPathProvider {

		@Override
		protected String applicationPath() {
			String pathMapping = "";
			if(isGat){
				pathMapping = "/gateway";
			}
			return pathMapping + contextPath;
		}

		@Override
		protected String getDocumentationPath() {
			return "/";
		}

	}

到了这里,关于解决通过网关访问Swagger后url路径不正确的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • weblogic 修改控制台路径或禁用控制台,解决weblogic安全扫描访问路径漏洞问题

    在⼀些安全漏洞扫描中,经常会扫描发现,使⽤weblogic管理控制台,会有个中危的漏洞。 出于安全的考虑需要对weblogic的console进行屏避,或者修改默认的访问路径,主要有两种方法,任选一种即可:(这里针对weblogic 11g 10.3.6.0) 1、进入默认的控制台,例如“localhost/console”

    2024年02月11日
    浏览(82)
  • SpringCloud + SpringGateway 解决Get请求传参为特殊字符导致400无法通过网关转发的问题

    title: “SpringCloud + SpringGateway 解决Get请求传参为特殊字符导致400无法通过网关转发的问题” createTime: 2021-11-24T10:27:57+08:00 updateTime: 2021-11-24T10:27:57+08:00 draft: false author: “Atomicyo” tags: [“tomcat”] categories: [“java”] description: “SpringCloud + SpringGateway 解决Get请求传参为特殊字符导致

    2024年02月07日
    浏览(46)
  • 【网络连接】ping不通的常见原因+解决方案,如何在只能访问网关时诊断,并修复IP不通的问题

    🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光,感谢你的陪伴与支持 ~ 🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长! 前些天发现了一个人工智能学习网站,内容深入浅出、易于理解。如果对人工智能感兴趣,不妨点击查看。 粉丝交流贴:网关能通IP不通可能有

    2024年03月09日
    浏览(205)
  • 解决主机无法通过网络访问虚拟机的问题

    我们在之前介绍了如何动手搭建一个简单的网站,其中使用了虚拟机和 Nginx 服务器,然后给虚拟机配置了桥接网络,这样就可以在主机上使用虚拟机的IP地址(192.168.1.xx)访问Nginx服务器上的内容。今天输入地址时却无法访服务器上的内容。看来服务器出问题了,本章回中将分享

    2024年02月10日
    浏览(46)
  • [路由][问题]OpenWrt解决局域网设备无法通过域名访问主机的问题

    1. 问题描述 测试发现使用OpenWrt进行端口端口转发或者Upnp之后,本地局域网设备使用域名访问主机但是却无法访问。 2. 问题分析 此问题经过查询属于\\\"NAT环回问题\\\",但是OpenWrt在做端口转发时自动设置了NAT环回,,而且已经将WAN口入站数据和转发设置为“接受”但是无效。。

    2024年02月16日
    浏览(73)
  • Django后台和微信小程序之间使用session方法,出现小程序访问404,Django后台找不到指定的URL问题解决

    在Django后台开启session中间件,小程序端请求Django后台的session属性,在Django中执行session会话操作,并响应应答给小程序,在小程序端执行cookie的缓存和读取操作。 在上述的功能完成后,小程序端访问时出现404错误,Django后台找不到指定的URL路径。 1、排查Django后台的URL路径是

    2024年02月06日
    浏览(47)
  • 如何通过公网访问私有网盘,天翼网关如何端口转发

    有时候你需要在家建个私有网盘,服务器都买好了建立好了,就是外网访问不了,这时候怎么办呢 废话不多说,一步一步照做: 第一步 先确认以下有没有帮我这个文章点赞😄 确认自己有没有开通公网ip 直接百度搜索“ip”,然后看一下这个ip和下图这个位置的ip是否

    2024年02月15日
    浏览(45)
  • Android项目在 app 中通过 WebView 访问 url显示空白,使用浏览器可以打开,Android WebView加载出现空白页面问题解决

    服务器证书校验主要针对 WebView 的安全问题。 在 app 中需要通过 WebView 访问 url,因为服务器采用的自签名证书,而不是 ca 认证,使用 WebView 加载 url 的时候会显示为空白,出现无法加载网页的情况。 使用 ca 认证的证书,在 WebView 则可以直接显示出来,不需要特殊处理。 以往

    2024年02月04日
    浏览(54)
  • docker内无法通过域名访问外网问题解决方案一

    docker中有的时候需要从容器内向外网环境进行访问,这个时候我边出现了一个诡异的问题,从容器的宿主机直接通过curl命令使用域名可以正常的访问并返回正确的解决,但是从容器中向外调用外网环境的这个域名的时候,curl命令会被卡住,一直到超时都没有任何返回数据,

    2024年02月08日
    浏览(50)
  • Java实现文件上传到服务器本地,并通过url访问

    Java实现文件上传到服务器本地,并通过url访问 有个需求,前端上传文件,需要用开关的方式同时支持上传七牛和服务器本地,方便不同的用户需求合理分配资源。本篇主要介绍文件上传到本地,然后通过url访问。 首先想到的就是可以通过SpringBoot通常访问静态资源的方式,当

    2024年02月03日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包