我正在研究 Spring MVC 并尝试将 Springfox v. 2.9.2 迁移到 3.0.0。当我将版本更改为 3.0.0 时,出现错误:
org.springframework.context.ApplicationContextException:无法启动bean“documentationPluginsBootstrapper”;嵌套异常是 java.lang.NoClassDefFoundError: 无法初始化类 springfox.documentation.schema.Types
这是我的依赖:
<swagger-version>3.0.0</swagger-version>
<swagger-version-ui>3.0.0</swagger-version-ui>
<swagger-annotations>2.1.11</swagger-annotations>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger-version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger-version-ui}</version>
</dependency>
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-annotations</artifactId>
<version>${swagger-annotations}</version>
</dependency>
如何在Spring MVC中正确配置Springfox 3.0.0?
网上很多资源都说只要
springfox-swagger2
和springfox-swagger-ui
这两个包就可以了。我发现如果只用这两个包来运行项目,就会报ClassnotFoundException
或者NoSuchMethodException
。一点一点添加,最终实际导入的包如下:
<spring.version>5.1.5.RELEASE</spring.version>
<spring.plugin.version>2.0.0.RELEASE</spring.plugin.version>
<swagger.version>3.0.0</swagger.version>
<!-- swagger2 jar-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
<exclusions>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-common</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-spring-web</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-core</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-spi</artifactId>
<version>${swagger.version}</version>
</dependency>
<!--spring plugin,configure swagger-->
<dependency>
<groupId>org.springframework.plugin</groupId>
<artifactId>spring-plugin-core</artifactId>
<version>${spring.plugin.version}</version>
</dependency>
具体原因我不知道。不过我试了一下,如果缺少哪个包就会报错。
当需要从
2.9.2
迁移到 3.0.0
时,这似乎是一个问题(目前 2.9.2
存在严重漏洞)。还有更大的版本2.9.2
,但似乎它们目前已损坏。请参阅此链接了解更多信息。
还有其他实例,例如从
Springfox Swagger 2
迁移到 Springdoc OpenAPI 3
,但有时不可能在成熟的项目中进行更改(如果有必要,有很多迁移指南)。
现在来看看如果无法迁移到
OpenAPI 3
的情况,一些指南说主要是简单地升级pom.xml
中的依赖项
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>3.0.0</version>
</dependency>
好吧,就算你改了,还是会有错误,主要是
Not found 404
还有Unable to infer base URL
现在如果有一个现有的
swagger config
文件,那就太棒了。这是一个供参考
package com.demo.example.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.demo.example"))
.paths(PathSelectors.any())
.build();
}
}
现在我们还需要包含正确的依赖项
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
注意:这种依赖性很重要
这应该可以解决大多数情况。等等,主要部分是 - 网址已更改!它已从
https://localhost/context-path/swagger-ui.html
移至 https://localhost/context-path/swagger-ui/
或 https://localhost/context-path/swagger-ui/index.html
。
希望这适用于大多数情况,而无需进行大量代码更改。