swagger-ui中的 host 和 basePath 等配置通过 swagger 的 /v2/api-doc
接口返回。在项目启动时可以提前设置 host 和 basePath,但是java代码无法动态支持多租户的 host 和 basePath,只能通过前端修改api的请求路径。具体步骤如下:
- 删除pox.xml 中的 springfox-swagger-ui 依赖,将 springfox-swagger2 版本设为 2.9.2。
- 去maven官网下载 springfox-swagger-ui 的jar包,解压缩,将里面的静态资源放到项目的java/resources/META-INF/resources目录下。
- 在Swagger2Config中新增静态资源的controller:
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // 解决swagger无法访问 registry.addResourceHandler("/swagger-ui.html") .addResourceLocations("classpath:/META-INF/resources/"); // 解决swagger的js文件无法访问 registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); }
- 在pox.xml 的build/resources中新增需要打包的静态资源。默认不加resources会将java/resources中的所有文件打包到jar文件中。
- 克隆
https://github.com/springfox/springfox/
项目的tag 2.9.2,cd 到springfox/springfox-swagger-ui/src/web/
目录,修改 package.json 中 webpack的版本:
"webpack": "^4.20.2",
"webpack-cli": "^3.1.1`
在 js/springfox.js
中的 SwaggerUIBundle 中增加插件配置,可以根据需要自行修改spec配置文件:
plugins: [ SwaggerUIBundle.plugins.DownloadUrl, { statePlugins: { spec: { wrapActions: { updateSpec: function (oriAction, system) { return (spec) => { var originSpec = JSON.parse(spec); originSpec.host = window.location.host; originSpec.basePath = window.location.pathname .split("/") .slice(0, -1) .join("/"); var newSpec = JSON.stringify(originSpec); return oriAction(newSpec); }; }, }, }, }, }, ]
运行 npm run build
打包 springfox.js.
6. 将上述文件替换 java 项目中的 springfox.js 即可。