搭建Swagger ui /Open Api

Swagger ui 與 spring jar包衝突

環境

  1. Spring Data Rest 2.2.0RELEAS
  2. Spring Data JPA 2.2.0RELEAS
  3. Swagger 2.9.2
  4. Swagger ui 2.9.2
  5. knife4j-spring-boot-starter 1.9.6

超級無解問題,將org.springframework.plugin升級到2.0.0
java.lang.NoSuchMethodError: org.springframework.plugin.core.PluginRegistry..getPluginFor

將org.springframework.plugin降到1.2.0
java.lang.NoSuchMethodError: org.springframework.plugin.core.PluginRegistry.of

總結 這個jar 沒有向下兼容,
想到三個方案:

  1. 讓spring-data-rest 用 1.2.0的
  2. 讓springfox-spring-web用 2.0.0的
  3. 自己寫一個用自己的

Swagger 404 解決記錄

產考自 : https://blog.csdn.net/xqnode/article/details/81382160

Open Api swagger-ui/index.html 404解決方案

  • Spring Boot 2.0.1.RELEAS
  • springdoc-openapi-ui 1.3.1

僅一條 registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/swagger-ui/3.25.0/"); 就可以了。
但爲什麼需要配置啊,新起一個2.2.6.RELEASE的SpringBoot就不需要配置可以直接訪問。不太可能版本問題。

Swagger/Open Api 理解

  1. 第三版叫Open Api 之前叫Swagger
  2. Swagger/Open Api 其實只是一個幫你發送Rest請求的工具。根據json或yml文件生成頁面。
  3. Swagger JAVA生成json/yml文件的工具是springfox-swagger2 和 springfox-swagger-ui 這倆個依賴。
  4. Open Api JAVA生成json/yml文件的工具是 springdoc-openapi-ui(1.49 版本及之前版本需要springdoc-openapi-core) 參考 :官網 https://springdoc.org 、國內 https://www.cnblogs.com/liululee/p/11925987.html 、國外 https://www.baeldung.com/spring-rest-openapi-documentation
  5. 不應該混合sprindoc-openapi和springfox依賴。

搭配Spring Data Rest 不生成文檔原因

OpenApi 和Spring Data Rest 不兼容的。
原因 : Spring Data Rest 是運行時動態生成的接口。參考 https://github.com/springdoc/springdoc-openapi/issues/282https://stackoverflow.com/questions/59240864/springdoc-openapi-with-spring-boot-starter-data-mongodb

No mapping found for HTTP request with URI [/swagger-ui/index.html] in DispatcherServlet with name ‘dispatcherServlet’

爲啥會被 攔截? <groupId>org.webjars</groupId> <artifactId>swagger-ui</artifactId> 的pom文件裏已經聲明瞭<destDir>${project.build.outputDirectory}/META-INF/resources/webjars/${project.artifactId}/${project.version}</destDir>

  • 只配置一條 registry.addResourceHandler("/webjars/**").addResourceLocations(“classpath:/META-INF/resources/webjars/”); 不會攔截但是 路徑變了 http://127.0.0.1:8083/webjars/swagger-ui/3.25.0/index.html?configUrl=/v3/api-docs/swagger-config。
  • 最終解決 : 僅一條 registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/swagger-ui/3.25.0/"); 就可以了

ConcurrentModificationException

OpenApi的bug?自己接口寫的不規範導致?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章