为自定义 WebConfig 扩展 WebMvcConfigurationSupport 时 org.springdoc swagger openapi 2 和 springboot 3 出现问题

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

我正在尝试在 Spring Boot 3 中配置 org.sprindoc-openapi 库。在我的应用程序中,我需要扩展 WebMvcConfigurationSupport 类以实现一些需要应用于 REST API 的自定义配置,问题就来了。如果我扩展 WebMvcConfigurationSupport 类,我可以访问 /v3/api-docs,但无法再访问 /swagger-ui.html 来浏览 API。如果我删除 WebMvcConfigurationSupport 类的扩展,一切都会正常工作,但我需要我的配置,所以我无法删除它。

检查执行器,/swagger-ui.html 路径已映射,但如果我尝试访问它,我会收到 404 页面未找到错误。我正在分享我的配置。

@Configuration
@EnableSpringDataWebSupport
public class WebConfig extends WebMvcConfigurationSupport {

    @Override
    protected RequestMappingHandlerMapping createRequestMappingHandlerMapping() {
        return new VersionedHandlerMapping();
    }

    @Override
    protected void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        argumentResolvers.add(new PageableHandlerMethodArgumentResolver());
    }

}

这是 org.springdoc 配置:

@Configuration
@ComponentScan(basePackages = { "org.springdoc" })
public class OpenApiConfig {
    @Bean
    OpenAPI coreMicroserviceOpenAPI() {
        return new OpenAPI()
                .info(new Info().title("xxxx")
                        .description("desc")
                        .version("1.0"));
    }
}

在使用的依赖项下方:

        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-api</artifactId>
            <version>2.1.0</version>
        </dependency>

提前谢谢大家。我希望你们中有人找到了问题的解决方案。

spring spring-boot swagger-ui springdoc springdoc-openapi-ui
2个回答
0
投票

以下配置适用于我,但您必须使用支持 OpenAPI 3.0 和 Spring Boot 3 的 2.X 版本的 springdoc-openapi

Spring Boot 依赖项:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>3.0.2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

开放API依赖:

不要被愚弄。 2.X 基线和整个 springdoc-openapi 库支持 Open API 3.0 规范。

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.0.0</version>
</dependency>

Spring Boot应用程序

确保 @RestController beans 已正确进行组件扫描。

@SpringBootApplication(scanBasePackages = "com.company")
public class Application {

}

Web配置类

使用

WebMvcConfigurerAdapter
代替
WebMvcConfigurationSupport

@Configuration
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {

   // code
}

包含此配置后,重新导入 Maven 项目,构建并运行应用程序,您可以在此处访问 Swagger UI:http://localhost:8080/swagger-ui/index.html


0
投票

首先,这个问题来自于忽略 Spring Web Mvc 自动配置。所以我们可以通过提供

swagger resource path
到 Web Mvc 配置来解决它。



添加 Swagger 资源路径

在扩展类

WebMvcConfiugrationSupport
中,您只需使用
addResourceHandlers
组件重写
SwaggerIndexTransformer
方法。

@Configuration  
@RequiredArgsConstructor  
public class AuthConfiguration extends WebMvcConfigurationSupport {  
    private final SwaggerIndexTransformer swaggerIndexTransformer;  // <- ADD THIS
  
    // ADD THIS METHOD
    @Override  
    public void addResourceHandlers(ResourceHandlerRegistry registry) {  
        registry.addResourceHandler("/swagger-ui*/**")  
            .addResourceLocations("classpath:/META-INF/resources/webjars/")  
            .resourceChain(false)  
            .addTransformer(swaggerIndexTransformer);  
    }
}


另一种方式

您可以使用

WebMvcConfigurer
WebMvcRegistrations
。与
WebMvcConfigurationSupport
不同,这些接口可以运行Spring MVC自动配置。这意味着MVC自动配置可以访问spring doc的默认配置!

@Configuration  
@RequiredArgsConstructor    
//public class AuthConfiguration extends WebMvcConfigurationSupport {  // REPLACE
public class AuthConfiguration implements WebMvcConfigurer, WebMvcRegistrations {
}


我的项目设置

  • SpringBoot 3.2.0
  • Java 17
  • SpringDoc-openapi-starter-webmvc-ui 2.0.2
  • Srping Web(MVC)6.1.1

你可以看我关于同样问题的文章。 https://blog.naver.com/chgy2131/223416148854

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