You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Swagger UI中显示当前URL?

动态让Swagger UI显示当前主机名/URL的解决方案

不用愁,完全可以实现动态获取当前页面的主机名和路径,不用硬编码!下面给你几种靠谱的方法:

方法1:在Swagger UI初始化时动态设置URL

如果是你自己初始化Swagger UI(比如在HTML页面里),可以直接用JavaScript获取当前页面的window.location来动态拼接API文档的URL,同时修改Swagger UI显示的服务器地址:

<script>
// 获取当前页面的主机地址(包含协议、域名、端口)
const currentHost = window.location.origin;
// 假设你的OpenAPI文档在当前域名下的 /openapi.json 路径
const openApiUrl = `${currentHost}/openapi.json`;

// 初始化Swagger UI
window.onload = function() {
  const ui = SwaggerUIBundle({
    url: openApiUrl,
    dom_id: '#swagger-ui',
    // 其他配置...
    presets: [
      SwaggerUIBundle.presets.apis,
      SwaggerUIStandalonePreset
    ]
  });

  // 动态修改OpenAPI文档的servers字段,让Swagger UI顶部显示当前主机地址
  ui.spec.servers = [{ url: currentHost }];
  ui.updateSpec(ui.spec);
};
</script>

这样操作后,Swagger UI不仅会加载当前域名下的OpenAPI文档,顶部显示的服务器地址也会和浏览器地址栏的主机信息保持一致。

方法2:在OpenAPI定义中用变量+Swagger UI动态替换

如果你的OpenAPI文档(yaml/json)里已经用了变量占位符,比如:

openapi: 3.0.0
servers:
  - url: "{protocol}://{hostname}"
    variables:
      protocol:
        default: https
      hostname:
        default: example.com

那你可以在Swagger UI初始化时,直接用当前页面的信息替换这些变量:

window.onload = function() {
  const ui = SwaggerUIBundle({
    url: '/openapi.yaml',
    dom_id: '#swagger-ui',
    // 动态替换变量为当前页面的对应值
    variables: {
      hostname: window.location.host,
      protocol: window.location.protocol.slice(0, -1) // 去掉协议末尾的冒号
    },
    // 其他配置...
  });
};

这种方式适合已有固定OpenAPI文档但不想硬编码主机名的场景,Swagger UI会自动把变量替换成当前页面的真实值。

方法3:后端动态生成OpenAPI文档(有后端集成场景)

如果你的Swagger UI是和后端框架集成的(比如Spring Boot + SpringDoc、Node.js + swagger-jsdoc),可以让后端在生成OpenAPI文档时,直接获取当前请求的主机信息,动态填充servers字段的URL值。

比如Spring Boot中用SpringDoc的话,可以自定义一个配置类:

@Component
public class DynamicServerUrlCustomiser implements OpenApiCustomiser {

    @Override
    public void customise(OpenAPI openApi) {
        // 从请求上下文获取当前的协议、域名、端口和上下文路径
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if (attributes != null) {
            HttpServletRequest request = attributes.getRequest();
            String currentUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
            openApi.setServers(List.of(new Server().url(currentUrl)));
        }
    }
}

这样后端返回的OpenAPI文档里的服务器地址就是当前请求的真实主机地址,Swagger UI自然会显示正确的URL。


内容的提问来源于stack exchange,提问作者pink_panda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:48:25