swagger 支持動態host和basePath


  swagger-ui中的 host 和 basePath 等配置通過 swagger 的 /v2/api-doc 接口返回。在項目啟動時可以提前設置 host 和 basePath,但是java代碼無法動態支持多租戶的 host 和 basePath,只能通過前端修改api的請求路徑。具體步驟如下:

  1. 刪除pox.xml 中的 springfox-swagger-ui 依賴,將 springfox-swagger2 版本設為 2.9.2。
  2. 去maven官網下載 springfox-swagger-ui 的jar包,解壓縮,將里面的靜態資源放到項目的java/resources/META-INF/resources目錄下。
  3. 在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/");
}
  1. 在pox.xml 的build/resources中新增需要打包的靜態資源。默認不加resources會將java/resources中的所有文件打包到jar文件中。
  2. 克隆 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 即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM