我正在尝试在 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>
提前谢谢大家。我希望你们中有人找到了问题的解决方案。
以下配置适用于我,但您必须使用支持 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
首先,这个问题来自于忽略 Spring Web Mvc 自动配置。所以我们可以通过提供
swagger resource path
到 Web Mvc 配置来解决它。
在扩展类
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 {
}
我的项目设置
你可以看我关于同样问题的文章。 https://blog.naver.com/chgy2131/223416148854