将 Springfox 从 2.9.2 版迁移到 3.0.0 后,Swagger 无法工作

问题描述 投票:0回答:2

我正在研究 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?

java spring-mvc swagger springfox
2个回答
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>

具体原因我不知道。不过我试了一下,如果缺少哪个包就会报错。


0
投票

当需要从

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

Image Added for Reference

现在如果有一个现有的

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

希望这适用于大多数情况,而无需进行大量代码更改。

© www.soinside.com 2019 - 2024. All rights reserved.