首页 > 解决方案 > 无法使用带有注释的 Spring 在 OpenApi 中将标头设置为可选

问题描述

我正在使用 Java 11.0.2、Spring Boot 2.2.6 和 Spring OpenApi Core 1.1.49 使用注释创建 OpenApi 文档。

在控制器中创建商家的请求期间,我需要有一个自定义标头属性,但这需要是可选的。基于 Parameter Object 的 Swagger 文档,字段“required”(确定此参数是否为必填项。如果参数位置为“path”,则此属性为 REQUIRED 且其值必须为 true。否则,可以包含该属性及其默认值为 false。)默认情况下 header 为 false,但在下面您可以看到由于某种原因为 true(尽管我将此选项配置为“false”)。

Java - 控制器方法的一部分

public ResponseDto create(@Parameter(in = ParameterIn.HEADER, required = false, schema = @Schema(type = "string", format = "uuid"), name = "X-Request-Correlation-Id", @RequestHeader( "X-Request-Correlation-Id") @Nullable String headerXRequestId, ... <

这导致 OpenApi yaml 文件 - 使用注释中的信息自动生成

参数:- 名称:X-Request-Correlation-Id in:header required:true schema:type:string format:uuid

你能指出问题吗,因为我在文档或其他任何地方都找不到解决方案?!

标签: springopenapi

解决方案


找到了解决方案 - 问题不在 OpenApi 注释 @Parameter 中,而是在 Spring 绑定注释 @RequestHeader 中,它将标头字段绑定到方法参数。@RequestHeader 也有字段“required”,默认情况下,它设置为“true”,它会覆盖@Parameter 中的那个。所以解决方案是以下语法 - @RequestHeader(name = "X-Request-Correlation-Id", required = false)。


推荐阅读