Spring boot OpenAPI&;spring文档未在控制器类中找到所有映射
这有点奇怪。springdoc openapi ui v1.2.32,生成的文档只包含控制器中的少数映射 例如: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>
@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