Swagger ui 与 spring jar包冲突
环境
- Spring Data Rest 2.2.0RELEAS
- Spring Data JPA 2.2.0RELEAS
- Swagger 2.9.2
- Swagger ui 2.9.2
- 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 没有向下兼容,
想到三个方案:
- 让spring-data-rest 用 1.2.0的
- 让springfox-spring-web用 2.0.0的
- 自己写一个用自己的
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 理解
- 第三版叫Open Api 之前叫Swagger
- Swagger/Open Api 其实只是一个帮你发送Rest请求的工具。根据json或yml文件生成页面。
- Swagger JAVA生成json/yml文件的工具是springfox-swagger2 和 springfox-swagger-ui 这俩个依赖。
- 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
- 不应该混合sprindoc-openapi和springfox依赖。
搭配Spring Data Rest 不生成文档原因
OpenApi 和Spring Data Rest 不兼容的。
原因 : Spring Data Rest 是运行时动态生成的接口。参考 https://github.com/springdoc/springdoc-openapi/issues/282 、 https://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?自己接口写的不规范导致?