Spring boot OpenAPI&;spring文档未在控制器类中找到所有映射

Spring boot OpenAPI&;spring文档未在控制器类中找到所有映射,spring-boot,swagger,openapi,springdoc,springdoc-openapi-ui,Spring Boot,Swagger,Openapi,Springdoc,Springdoc Openapi Ui,这有点奇怪。springdoc openapi ui v1.2.32,生成的文档只包含控制器中的少数映射 例如: @Operation( summary = "Foo", description = "Foo" ) @PostMapping(path="/v1/foo") public ResponseEntity<ResponseObject>

这有点奇怪。springdoc openapi ui v1.2.32,生成的文档只包含控制器中的少数映射

例如:

    @Operation(
            summary = "Foo",
            description = "Foo"
    )
    @PostMapping(path="/v1/foo")
    public ResponseEntity<ResponseObject> postFoo(@RequestBody FooRequestObject searchRequest, HttpServletRequest request){ ... }


    @Operation(
            summary = "Bar",
            description = "Bar"
    )
    @GetMapping(path="/v1")
    public ResponseEntity<ResponseObject> getBar(@RequestBody BarRequestObject request, HttpServletRequest request){ ... }


    @Operation(
            summary = "Bar",
            description = "Bar"
    )
    @PostMapping(path="/v1")
    public ResponseEntity<ResponseObject> postBar(@RequestBody BarRequestObject request, HttpServletRequest request){ ... }
如果我将此方法添加到一个全新的控制器,则会生成文档

谢谢

编辑 配置类

@Configuration
public class SwaggerConfig {                                    

    @Bean
    public OpenAPI springOpenAPI() {
        return new OpenAPI()
                .info(new Info().title("My API")
                .description("My API service documentation. ")
                .version("v1.0")
                .license(new License().name("Terms of Use").url("https://myapi.com/terms.html")));
    }
    
}

您所面临的问题是因为您使用了
路径的级别1引用来匹配
,这导致Springdoc过滤指定路径上仅可用的端点

springdoc.paths-to-match=/api/v1,/v2,/v3,/status
上述属性与
/v2
/v3
/status
/api/v1
开始和结束的端点相匹配。这无法匹配可能为
/users/v2/
或甚至
/v2/users
等形式的端点

虽然不支持使用完整正则表达式来指定要包含的端点,但对
**
的基本支持可以帮助您指定要包含/排除的级别

考虑下面的例子

springdoc.paths-to-match=/**/v1/**/
它将包括任何包含
/v1/
的端点。例如
/users/v1/
/v1/dasboard
以及
/user/v1/dashboard

springdoc.paths-to-match=/v2/**
它将只匹配从
/v2
开始并深入n级的端点。将包括
/v2/dashboard
等示例,但不包括
/users/v2/something

springdoc.paths-to-match=/**/v1
它将只匹配以
/v1
结尾的路径。类似于
/users/v1
的示例将被匹配,而类似于
/v1/user
的示例将不被匹配

或者,您也可以更新
Bean
来执行相同的操作。但请注意,属性文件优先于bean配置

//您可以在这里找到现有的bean
//定义将包含特定版本的API组。有助于对API进行版本控制。
@豆子
公共团体PENAPI hideApis(){
返回GroupedOpenApi.builder().group(“默认值”)
.pathsToExclude(“/api/v2/**”,“/v2/**”,“/**/v3/**”)
.PathToMatch(“/v1/**”和“/api/v1/**”)
.build();
}

您可以共享显示此错误的代码的可复制副本吗?我不能,但我可以在原始问题中添加任何可能有用的内容。您可以共享
应用程序中的属性吗。属性
(或其等效项)如果有,我也看到
(@RequestBody BarRequestObject request,HttpServletRequest)
错误,因为两个参数的名称相同,这会导致编译错误。我已经尝试过修改当前代码来修复错误,它确实对我有效。错误只是我混淆中的一个输入错误,代码本身是正确的,并且构建良好。这是
application.properties
的一部分:
springdoc.path to match=/api/v1、/v2、/v3、/status
谢谢,这就是问题所在。
springdoc.paths-to-match=/**/v1