Springdoc GroupedOpenApi 不遵循使用 OperationCustomizer 设置的全局参数
Posted
技术标签:
【中文标题】Springdoc GroupedOpenApi 不遵循使用 OperationCustomizer 设置的全局参数【英文标题】:Springdoc GroupedOpenApi not following global parameters set with OperationCustomizer 【发布时间】:2020-10-28 17:48:20 【问题描述】:使用GroupedOpenApi
定义 API 组时,添加到每个端点的通用参数集不会出现在参数列表中。
以下是各自的代码
@Bean
public GroupedOpenApi v1Apis()
return GroupedOpenApi.builder().group("v1 APIs")
// hide all v2 APIs
.pathsToExclude("/api/v2/**", "/v2/**")
// show all v1 APIs
.pathsToMatch("/api/v1/**", "/v1/**")
.build();
以及将标准头添加到所有端点的类
@Component
public class GlobalHeaderAdder implements OperationCustomizer
@Override
public Operation customize(Operation operation, HandlerMethod handlerMethod)
operation.addParametersItem(new Parameter().$ref("#/components/parameters/ClientID"));
operation.addSecurityItem(new SecurityRequirement().addList("Authorization"));
List<Parameter> parameterList = operation.getParameters();
if (parameterList!=null && !parameterList.isEmpty())
Collections.rotate(parameterList, 1);
return operation;
实际输出
预期输出
要重现该问题,请克隆 https://github.com/debargharoy/springdoc-test
解决方法
在应用程序属性文件中添加要包含/排除的路径可以解决错误。但是代码级别的东西将不胜感激。
【问题讨论】:
【参考方案1】:在构建 Api Group 时附加所需的OperationCustomizer
object。
@Bean
public GroupedOpenApi v1Apis(GlobalHeaderAdder globalHeaderAdder)
return GroupedOpenApi.builder().group("v1 APIs")
// hide all v2 APIs
.pathsToExclude("/api/v2/**", "/v2/**")
// show all v1 APIs
.pathsToMatch("/api/v1/**", "/v1/**")
.addOperationCustomizer(globalHeaderAdded)
.build();
编辑:参考@Value not providing values from application properties Spring Boot更新答案
【讨论】:
完全同意答案以上是关于Springdoc GroupedOpenApi 不遵循使用 OperationCustomizer 设置的全局参数的主要内容,如果未能解决你的问题,请参考以下文章
Springfox与SpringDoc——swagger如何选择(SpringDoc入门)
SpringDoc (spring boot) utf-8 json 标头响应文档