我正在使用 springdoc-openapi-ui 作为 Spring Boot API 文档并面临以下问题 -
我已添加所有必要的配置,如下 -
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.5.2</version>
</dependency>
package com.abc.tl;
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@OpenAPIDefinition
public class TLApplication {
public static void main(String[] args) {
SpringApplication.run(TLApplication.class, args);
}
}
使用java版本 - 11,不知道问题出在哪里,项目无法运行。
通过以下依赖项,解决了这个问题。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.0</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.5.12</version>
</dependency>
我在我的应用程序 application.properties 中添加了对我有用的以下行。
spring.mvc.pathmatch.matching-strategy = ANT_PATH_MATCHER
以上项目有效
spring.mvc.pathpattern.matching-strategy=ant_path_matcher
但是,它应该是
ant-path-matcher
- 破折号而不是下划线
似乎
PathPatternParser
不允许**
出现在中间,并且会拒绝这样的模式(查看更多详细信息:https://github.com/spring-projects/spring-boot/issues/21694 )。
看起来这里的代码在路径模式的中间插入了一个
**
。
uiRootPath.append(ALL_PATTERN);
registry.addResourceHandler(uiRootPath + SWAGGER_UI_PATTERN)
完整代码
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
StringBuilder uiRootPath = new StringBuilder();
if (swaggerPath.contains(DEFAULT_PATH_SEPARATOR))
uiRootPath.append(swaggerPath, 0, swaggerPath.lastIndexOf(DEFAULT_PATH_SEPARATOR));
if (actuatorProvider.isPresent() && actuatorProvider.get().isUseManagementPort())
uiRootPath.append(actuatorProvider.get().getBasePath());
uiRootPath.append(ALL_PATTERN);
registry.addResourceHandler(uiRootPath + SWAGGER_UI_PATTERN)
.addResourceLocations(CLASSPATH_RESOURCE_LOCATION + DEFAULT_WEB_JARS_PREFIX_URL + DEFAULT_PATH_SEPARATOR)
.resourceChain(false)
.addTransformer(swaggerIndexTransformer);
}
在你的代码中的某个地方(我猜是在安全配置中)你已经配置了
/**/swagger-ui/**
。最近(Spring 5.3)这些路径配置现在由 PathPatternParser
进行分析(取代了旧的 AntPathMatcher
,允许像这样的路径)。
按照建议将
spring.mvc.pathpattern.matching-strategy=ant_path_matcher
添加到您的 application.properties
或将路径配置更改为 "/webjars/swagger-ui/**"
之类的内容。
就我而言,我使用的是旧版本的
springdoc-openapi-ui
springdoc-openapi-data-rest
,它恰好与最新版本的Spring Boot不兼容。在 https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-ui 上查找最新的 maven 包并使用该版本,解决了问题。
我添加了这一行,我这边正在工作 application.properties
spring.mvc.pathmatch.matching-strategy = ANT_PATH_MATCHER
就我而言, springdoc-openapi-ui 处于出色的模块中。我只是排除 springdoc-openapi-ui。
<dependency>
<groupId>some.group</groupId>
<artifactId>some.artifact</artifactId>
<version>LATEST</version>
<exclusions>
<exclusion>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
</exclusion>
</exclusions>
</dependency>