java 检测到无效的Map模式:/**/ Swagger -ui/**

rnmwe5a2  于 2023-02-18  发布在  Java
关注(0)|答案(7)|浏览(235)

我正在使用springdoc-openapi-ui作为spring Boot API文档,遇到了以下问题-

我已添加所有必要的配置如下-
1.Maven的依赖-

<dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-ui</artifactId>
            <version>1.5.2</version>
</dependency>

1.这是主文件-

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,不确定问题在哪里,项目无法运行。

sczxawaw

sczxawaw1#

通过以下依赖项,解决了此问题。

<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>
8iwquhpp

8iwquhpp2#

我在我的应用程序www.example.com中添加了下面一行application.properties,这对我很有效。

spring.mvc.pathmatch.matching-strategy = ANT_PATH_MATCHER
fcy6dtqo

fcy6dtqo3#

以上项目工作spring.mvc.pathpattern.matching-strategy=ant_path_matcher
但是,它应该是ant-path-matcher-破折号而不是下划线

z3yyvxxp

z3yyvxxp4#

似乎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);
}
dnph8jn4

dnph8jn45#

在代码中的某个地方(我猜是在安全配置中),您已经配置了/**/swagger-ui/**。最近(Spring 5.3),这些路径配置现在由PathPatternParser分析(它取代了旧的AntPathMatcher,后者允许类似的路径)。
按照建议将spring.mvc.pathpattern.matching-strategy=ant_path_matcher添加到application.properties,或者将路径配置更改为类似"/webjars/swagger-ui/**"的内容。

7jmck4yq

7jmck4yq6#

在我的例子中,我使用的是旧版本的springdoc-openapi-uispringdoc-openapi-data-rest,它碰巧与最新版本的Sping Boot 不兼容,在https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-ui上查找最新的maven包并使用该版本,解决了这个问题。

7bsow1i6

7bsow1i67#

我添加了这行我这边正在工作application.properties

spring.mvc.pathmatch.matching-strategy = ANT_PATH_MATCHER

相关问题