面临同样的问题,并提出了两种(类似的)解决方法:
选项 1:覆盖 META-INF 中的 'swagger-initializer.js'
从 swagger-ui webjars 包中获取 swagger-initializer.js 并将其复制到以下路径(请确保它与您的版本匹配,我使用的是 4.13.2):
/src/main/resources/META-INF/resources/webjars/swagger-ui/4.13.2/swagger-initializer.js
然后根据您的需要调整 swagger-initializer.js,例如激活queryConfigEnabled:
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// adjusted from /webjars/swagger-ui/4.13.2/swagger-initializer.js
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
window.onload = function() {
//<editor-fold desc="Changeable Configuration Block">
// the following lines will be replaced by docker/configurator, when it runs in a docker-container
window.ui = SwaggerUIBundle({
urls: [{url:"https://darosh.github.io/openapi-directory-lite/specs/github.com/v3.json", name: "github"},{url: "https://petstore.swagger.io/v2/swagger.json", name: "petstore"}],
dom_id: '#swagger-ui',
deepLinking: true,
queryConfigEnabled: true, // <-- I added this line
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout"
});
//</editor-fold>
};
我在 Spring Boot 应用程序中成功测试了这种方法。
选项 2:使用自定义 swagger-initializer.js 创建自定义 html
从 swagger-ui webjars 包中获取 index.html 和 swagger-initializer.js 并将其复制到您提供服务的路径。在 Spring Boot 应用程序中,例如:
src/main/resources/static/swagger-initializer.js
src/main/resources/static/swagger-ui.html
(为了清楚起见,我将它从 index.html 重命名为 swagger-ui.html)
现在调整 html 文件以指向 swagger-ui 资源的正确 webjars 位置并指向您自己的 swagger-initializer.js:
<!--------------------------------------------------------------------------------------------------------------------->
<!-- adjusted from webjars/swagger-ui/4.13.2/schema-template.json-->
<!--------------------------------------------------------------------------------------------------------------------->
<!-- HTML for static distribution bundle build -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Swagger UI by Fable</title>
<link rel="stylesheet" type="text/css" href="/webjars/swagger-ui/swagger-ui.css" />
<link rel="stylesheet" type="text/css" href="/webjars/swagger-ui/index.css" />
<link rel="icon" type="image/png" href="/webjars/swagger-ui/favicon-32x32.png" sizes="32x32" />
<link rel="icon" type="image/png" href="/webjars/swagger-ui/favicon-16x16.png" sizes="16x16" />
</head>
<body>
<div id="swagger-ui"></div>
<script src="/webjars/swagger-ui/swagger-ui-bundle.js" charset="UTF-8"> </script>
<script src="/webjars/swagger-ui/swagger-ui-standalone-preset.js" charset="UTF-8"> </script>
<script src="/swagger-initializer.js" charset="UTF-8"> </script>
</body>
</html>
现在您可以根据需要调整自己的 swagger-initializer.js(例如,请参见选项 1)。
我在 Spring Boot 应用程序中成功测试了这种方法。
最后的笔记
虽然选项 1 只需要调整一个文件,但选项 2 对我来说似乎更干净、更灵活。请注意,在选项 1 中,每当您更新 webjar 的版本时,您必须调整自定义 swagger-initializer.js 的路径,因为该版本已在路径中编码。