spring - 无法使用带有注释的 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
你能指出问题吗,因为我在文档或其他任何地方都找不到解决方案?!
解决方案
找到了解决方案 - 问题不在 OpenApi 注释 @Parameter 中,而是在 Spring 绑定注释 @RequestHeader 中,它将标头字段绑定到方法参数。@RequestHeader 也有字段“required”,默认情况下,它设置为“true”,它会覆盖@Parameter 中的那个。所以解决方案是以下语法 - @RequestHeader(name = "X-Request-Correlation-Id", required = false)。
推荐阅读
- mysql - XAMPP - MySQL 意外关闭,日志看起来很好,我猜没有任何错误
- laravel - 从 vform vue laravel 中的关系模型填充表单字段
- sql - T-SQL 数据库还原给使用 SSMS 带来不同的结果
- reactjs - 如何使用反应从视频网址中获取第一帧?
- google-sheets - 在查询函数中转换日期并按日期列排序
- java - 如何以编程方式将约束布局按钮添加到另一个布局
- oop - 对象变量在 Golang 中没有得到更新
- python - 大写 Panda Dataframe 中的随机行
- c# - 集成测试中的自定义 WebApplicationFactory 未在 Startup.cs 中注册服务(ASP.NET Core 3.1)
- ios - 重新创建反应本机禁用暗模式不起作用(ios)