本文解决 springfox-swagger-ui 在二级目录下的使用问题。如同一个域名的 /user/post 用 Nginx 分别反向代理指向不同的应用,我们希望在每个应用中都可以正常使用 Swagger。

很多人爱折腾,总要找到个办法,甚至很多人会打起修改源码的主意,希望本文能帮你节省点时间。

注意:本文使用的 springfox-swagger2 版本是 2.6.0

修改全局 context path

Spring Boot 环境中只要配置以下环境变量即可:

server.contextPath=/user
复制代码

那么你的所有的接口,默认就都是在 /user 下面了,自然 swagger-ui 也就能正常使用了,访问 /user/swagger-ui.html 即可。

这是最最简单的方法,不过在有些特定的环境中会有问题,比如我司:

由于设置了 contextPath,那么健康检测接口 /health 也会被自动换为 /user/health,而我们的发布系统一根筋地要找 /health 接口,也就导致我们的应用会发布不了。

只有在碰到这种方法解决不了的时候,我们才要考虑使用下面介绍的方法。

使用 Controller 做 forward

首先,将 /user/swagger-ui.html forward 到 /swagger-ui.html

这样 swagger-ui.html 页面中,它的 basePath 会变为 www.javadoop.com/user,然后将 swagger-ui.html 页面中的所有调用相应 forward 即可。

@Controller
// 看这里
@RequestMapping("user")
public class SwaggerController extends BaseController {@GetMapping("/swagger-ui.html")public String index() {return "forward:/swagger-ui.html";}@GetMapping("/webjars/springfox-swagger-ui/css/{s:.+}")public String css(@PathVariable String s) {return "forward:/webjars/springfox-swagger-ui/css/" + s;}@GetMapping("/webjars/springfox-swagger-ui/{s:.+}")public String baseJs(@PathVariable String s) {return "forward:/webjars/springfox-swagger-ui/" + s;}@GetMapping("/webjars/springfox-swagger-ui/lib/{s:.+}")public String js(@PathVariable String s) {return "forward:/webjars/springfox-swagger-ui/lib/" + s;}@GetMapping("/webjars/springfox-swagger-ui/images/{s:.+}")public String images(@PathVariable String s) {return "forward:/webjars/springfox-swagger-ui/images/" + s;}@GetMapping("/swagger-resources/configuration/ui")public String ui() {return "forward:/swagger-resources/configuration/ui";}@GetMapping("/swagger-resources")public String resources() {return "forward:/swagger-resources";}@GetMapping("/v2/api-docs")public String docs() {return "forward:/v2/api-docs";}@GetMapping("/swagger-resources/configuration/security")public String security() {return "forward:/swagger-resources/configuration/security";}
}
复制代码

使用 ViewControllerRegistry

很多人会使用下面的方法来写,我们也来看一下:

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/user/**").addResourceLocations("classpath:/META-INF/resources/");}@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addRedirectViewController("/user/v2/api-docs", "/v2/api-docs").setKeepQueryParams(true);registry.addRedirectViewController("/user/swagger-resources/configuration/ui","/swagger-resources/configuration/ui");registry.addRedirectViewController("/user/swagger-resources/configuration/security","/swagger-resources/configuration/security");registry.addRedirectViewController("/user/swagger-resources", "/swagger-resources");}
}
复制代码

这种写法,访问静态资源的时候是完全没有问题的,但是 swagger-ui.html 在使用 ajax 调用接口的时候,这种配置做的是跳转,如 "/user/v2/api-docs" 自动跳转到 "/v2/api-docs" 其实是不满足我们需求的。因为 /v2/api-docs 这个路径根本就不会跳到我们的 user 应用。

springfox-swagger-ui 在二级目录下的路径问题相关推荐

  1. vue项目部署在二级目录下

    一般情况下,前端项目部署在各自端口根目录下.但是如果服务器端口限制等因素,多个项目共享一个端口,就需要部署在二级目录下. 但是会面临几个问题 服务器配置 前端静态资源路径配置 前端请求路径写法 前端路 ...

  2. Yii2中如何访问controller的二级目录下的控制器

    Yii2默认的控制器下只有一层目录放在controller目录下,当开发的需要的时候需要在该目录下面新增一层目录也就是在controller下增加二级目录,比如controller/api/Membe ...

  3. beego使用API自动化文档生成swagger时,routers目录下无法生成commentsRouter_controllers.go文件

    今天项目生成swagger时,按照官方文档操作,swagger目录和压缩包都正常创建,就连http://localhost:8080/swagger/也正常访问,但是 Try it out 接口时,就 ...

  4. TP5项目放在二级目录下重定向访问不对问题

    最近用Thinkphp5做了一个小网站,发现当PHP版本切换成5.5以上版本后 如果访问地址是全地址 如loacalhost/index/index/index重定向不起作用,提示:No input ...

  5. 群晖wordpress如何连接mysql,「全网首发」群晖wordpress二级目录下实现IP加端口访问教程...

    1.需要的工具:web station ,MariaDB 10,phpmyadmin,php5.6,Apache http Server 2.4这几个工具可以套件中心安装wordpress时一键自动安 ...

  6. CentOS 个人目录下中文路径转英文路径

    打开终端,在终端下输入命令: export LANG=en_US xdg-user-dirs-gtk-update 这个时候会弹出一个配置界面,提示是否将中文目录切换为英文目录.选中不再提示,确定.系 ...

  7. 获取resources目录下文件路径的九套功法

    文章目录 前述 功法一 功法二 功法三 功法四(重要) 功法五(重要) 功法六(重要) 功法七 功法八 功法九 前述 项目开发中,经常会有一些静态资源,被放置在resources目录下,随项目打包在一 ...

  8. Springfox Swagger UI

    Swagger介绍及使用 相信无论是前端还是后端开发,都或多或少地被接口文档折磨过.前端经常抱怨后端给的接口文档与实际情况不一致.后端又觉得编写及维护接口文档会耗费不少精力,经常来不及更新.其实无论是 ...

  9. 获取 一个文件 在沙盒Library/Caches/ 目录下的路径

    + (NSString *)getFullPathWithFile:(NSString *)urlName {          //先获取 沙盒中的Library/Caches/路径     NSS ...

最新文章

  1. 读QT5.7源码(三)Q_OBJECT 和QMetaObject
  2. 【Linux】gcc -o 什么意思
  3. Redis 远程字典服务及shell全部命令汇总【点击可查看高清原图】(附 xmind思维导图原文件 百度网盘)
  4. MinGW安装和使用基础教程
  5. CRC32算法详细推导(3)
  6. 什么是document对象?如何获取文档对象上的元素?_dom对象
  7. 解决Entry fileTemplates//Singleton.java.ft not found in C:/Dev/android-studio/lib/resources_en.jar
  8. 45:十进制到八进制(OpenJudge在线题库 :NOI / 1.13编程基础之综合应用)
  9. 完成css的切图 图片任意,css切图是什么意思
  10. 13_python基础—函数进阶(参数、返回值、递归)
  11. L1-004. 计算摄氏温度-PAT团体程序设计天梯赛GPLT
  12. AES SBox的构造(python)
  13. 202101汇率换算
  14. iPhone 13 真的要来了!苹果秋季发布会前瞻
  15. Windows如何使文件显示扩展名
  16. python 计算召回率的程序_python实现计算精度、召回率和F1值
  17. 大数据时代时代舍恩伯格书资源_疫情宅家,这些大数据书籍可以好好读读
  18. 使用Java生成带有下划线字体的文字
  19. Linux下的lds连接脚本详解,Linux链接脚本学习--lds
  20. 卡片的sak为不支持的类型_泛微OA系统为大型制造业打造内外一体的移动报修平台...

热门文章

  1. Apache commons lang3包ArrayUtils工具使用
  2. 《Groovy官方指南》目录
  3. Spring AOP中定义切点(PointCut)和通知(Advice)
  4. 【死磕Java并发】—–深入分析synchronized的实现原理
  5. Bag of Words cpp实现(stable version 0.01)
  6. k-d tree算法
  7. Machine Learning week 11 quiz: Application: Photo OCR
  8. drf中的各种view,viewset
  9. 《UNIXLinux程序设计教程》一第2章-2.0 标准输入输出
  10. 解压缩文件命令linux