spring-boot - openapi 3.0 中所有 API 的强制标头
问题描述
我将 OpenAPI 3.0 与 Spring-boot 5 一起使用,因此没有配置 YAML。我有一个包含客户端标识 ID 的标头(这不是身份验证标头)。我想让它成为一个强制性的标头参数。在 OpenAPI 配置下方添加
@Configuration
public class OpenAPIConfiguration {
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.components(new Components()
.addParameters("myCustomHeader", new Parameter().in("header").schema(new StringSchema()).required(true).description("myCustomHeader").name("myCustomHeader")))
.info(new Info()
.title("My Rest Application")
.version("1.2.26"));
}
}
但是,swagger UI 不会在任何 API 中显示所需的参数。有人可以帮助我做错什么吗?
解决方案
将参数定义添加到自定义OpenAPI
bean 将不起作用,因为参数不会传播到操作定义。您可以使用OperationCustomizer实现您的目标:
@Bean
public OperationCustomizer customize() {
return (operation, handlerMethod) -> operation.addParametersItem(
new Parameter()
.in("header")
.required(true)
.description("myCustomHeader")
.name("myCustomHeader"));
}
在 springdoc-openapi 1.2.22 中引入了 OperationCustomizer 接口。在以前的版本中,您需要使用OpenApiCustomiser:
@Component
public class MyOpenApiCustomizer implements OpenApiCustomiser {
private static final List<Function<PathItem, Operation>> OPERATION_GETTERS = Arrays.asList(
PathItem::getGet, PathItem::getPost, PathItem::getDelete, PathItem::getHead,
PathItem::getOptions, PathItem::getPatch, PathItem::getPut);
private Stream<Operation> getOperations(PathItem pathItem) {
return OPERATION_GETTERS.stream()
.map(getter -> getter.apply(pathItem))
.filter(Objects::nonNull);
}
@Override
public void customise(OpenAPI openApi) {
openApi.getPaths().values().stream()
.flatMap(this::getOperations)
.forEach(this::customize);
}
private void customize(Operation operation) {
operation.addParametersItem(
new Parameter()
.in("header")
.required(true)
.description("myCustomHeader")
.name("myCustomHeader"));
}
}
推荐阅读
- powershell - 程序运行错误。它不能加载两个xml文件?
- javascript - 使用 Javascript 计算数组中的重复值并返回带有附加值的计数
- json - 颠簸转换以仅保留元素数组
- python - 如何在日志中找到字符串的最后一个实例?
- python - 类型错误:传递给“ConcatV2”操作的“值”的列表中的张量具有不完全匹配的类型 [bool,float32]
- scala - 是否可以在 spark 中创建数据帧的数据集?
- asp.net - 在数据库和 LINQ 优化之后,Web 应用程序正在使 CPU 过载。我可以让 SQL Server 运行得更慢吗?
- kotlin - Kotlin replaceWith 调用运算符
- android - 与其他 Android 设备共享指纹数据
- sql - 如何创建函数来计算表中列的空值