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 即可。