Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用springdoc-openapi使可选的OpenAPI参数为空?

如何使用springdoc-openapi使可选的OpenAPI参数为空?
EN

Stack Overflow用户
提问于 2021-09-23 22:39:58
回答 1查看 568关注 0票数 2

在生成的OpenAPI文档中,springdoc-openapi库自动将某些属性标记为required。例如,注释为@NotNull的属性将包含在所生成的YAML文件中的必需属性列表中。

该库不做的一件事是将可选属性标记为nullable: true。但是,默认情况下,Spring Boot应用程序将接受请求中的null,并在可选属性的响应中返回null。这意味着OpenAPI文档和端点的行为之间存在差异。

手动将任何单个属性标记为可为空很简单:只需将@Schema(nullable = true)添加到字段或访问器即可。但是,在具有多个属性的大型模型中,我希望以与required属性相同的方式自动确定这一点。也就是说,如果该属性不是必需的,我希望它为nullable,反之亦然。

如何在由springdoc-openapi生成的OpenAPI文档中将我的可选属性标记为nullable: true

示例

代码语言:javascript
运行
AI代码解释
复制
import io.swagger.v3.oas.annotations.media.Schema;
import javax.validation.constraints.NotNull;

public class RequiredExample {
    @NotNull
    private String key;

    private String value;

    public String getKey() { return key; }
    public void setKey(String key) { this.key = key; }
    public String getValue() { return value; }
    public void setValue(String value) { this.value = value; }
}

生成的OpenAPI文档:

代码语言:javascript
运行
AI代码解释
复制
"components": {
  "schemas": {
    "RequiredExample": {
      "required": [
        "key"
      ],
      "type": "object",
      "properties": {
        "key": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      }
    }
  }
}

所需的OpenAPI文档:

代码语言:javascript
运行
AI代码解释
复制
"components": {
  "schemas": {
    "RequiredExample": {
      "required": [
        "key"
      ],
      "type": "object",
      "properties": {
        "key": {
          "type": "string"
        },
        "value": {
          "type": "string"
          "nullable": true
        }
      }
    }
  }
}
EN

回答 1

Stack Overflow用户

发布于 2021-09-23 22:39:58

一种解决方案是创建一个springdoc-openapi OpenApiCustomiser Spring bean,它将所有属性设置为nullable,除非它们在required属性列表中。这种方法得益于内置的springdoc-openapi对@NotNull和其他此类注释的支持,因为required属性将根据这些属性的存在以标准方式进行计算。

代码语言:javascript
运行
AI代码解释
复制
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.media.Schema;
import org.springdoc.core.customizers.OpenApiCustomiser;
import org.springframework.stereotype.Component;
import java.util.Map;

@Component
public class NullableIfNotRequiredOpenApiCustomizer implements OpenApiCustomiser {
    @Override
    @SuppressWarnings({"rawtypes", "unchecked"})
    public void customise(OpenAPI openApi) {
        for (Schema schema : openApi.getComponents().getSchemas().values()) {
            if (schema.getProperties() == null) {
                continue;
            }

            ((Map<String, Schema>) schema.getProperties()).forEach((String name, Schema value) -> {
                if (schema.getRequired() == null || !schema.getRequired().contains(name)) {
                    value.setNullable(true);
                }
            });
        }
    }
}
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69310598

复制
相关文章
拥抱 OpenAPI 3: springdoc-openapi 食用指南
使用 springdoc-openapi 可以快速为 springboot 项目生成规范的 API 文档,具体使用步骤如下:
phoenix.xiao
2022/11/11
6.9K0
拥抱 OpenAPI 3: springdoc-openapi 食用指南
SpringBoot3集成Swagger
springfox 已经停止更新很久了,SpringBoot新版本都不支持。为了能够继续使用Swagger,只能调整继承库。
郭顺发
2023/07/17
2.3K0
SpringBoot3集成Swagger
如何使 highchart图表标题文字可选择复制
初期想了蛮久也搜了蛮多,没搜到,找到的结论是图表使用的是svg实现,必然无法选择文字,似乎是个死问题,已经濒临放弃
书童小二
2019/06/22
2.4K1
Pathvariable注解允许参数为空吗?
于是我们可以通过其他的方式来变通一下,首先想到的是通过 required 参数设置为 false
taixingyiji
2022/07/25
1.2K0
java如何判断对象为空_java对象如何判断是否为空
在实际书写代码的时候,经常会因为对象为空,而抛出空指针异常java.lang.NullPointerException。
全栈程序员站长
2022/06/25
13.6K0
java如何判断对象为空_java对象如何判断是否为空
git clone几种可选参数的使用与区别[通俗易懂]
github clone代码的速度,依赖于代码库的大小以及clone速度,基本是几十kb到200kb之间。要是能达到400kb,恭喜你;要是只有十几kb,emmmm, 还是先去吃饭吧。
全栈程序员站长
2022/09/16
2K0
git clone几种可选参数的使用与区别[通俗易懂]
自定义注解判断参数为空
最近在项目中遇到了一个小小的问题,和大家分享一下,简单的接口但是在不同的业务场景下需要有不同的校验逻辑,有的参数在特定的场景下需要校验,有的参数在另外的场景下则不需要校验。解决方案有很多种加上我当时是刚刚入职为了偷懒贪图省事,所以就写了一大堆的if/else。如下展示(由于业务原因,敏感字段已转换):
@派大星
2023/06/28
2490
自定义注解判断参数为空
ts函数可选参数-未使用—ESlint 校验
如果你在 TypeScript 函数中使用了可选参数,但是 ESLint 报错了,你可以通过以下方法进行解决:
程序员王天
2023/10/18
7630
python 参数可选的装饰器
from functools import wraps, partial import logging
用户5760343
2019/12/12
1.1K0
过程(五)可选参数和可变参数
大家好,上节介绍了过程传递参数时,形参与实参结合的两种方式,传地址和传值。本节将介绍可选参数和可变参数。
无言之月
2019/10/13
4.9K0
JSON.stringify() 可选参数的作用
JSON.stringify是我们经常使用的工具函数,第二个可选参数其实也有一些小技巧,本文阐释了可选参数的常见两种使用方式。
IT工作者
2022/01/21
1.2K0
mybatis @Select注解中当参数为空则不添加该参数的判断
这样整个语句是写死的,必须有2个参数,在这种模式下,如何能实现根据room和mydate是否为空来动态的拼写sql语句 比如当mydate=""
一个会写诗的程序员
2018/08/17
2.7K0
使用“空”对象替代引用是否为空判断
使用Null对象替代引用是否为空判断 编程语言中最常见运行时异常非NullPointerException莫属,只要程序依赖于外部的输入数据,比如说http请求传递的查询字符串参数、关系数据库连接、磁盘文件读取,空引用异常就无法避免。通常,程序需要满足某些条件才能正常的往下执行,假如这些条件依赖外部输入数据,而这些外部输入的数据肯定无法保证百分百不出错,比如说网络连接失败、数据库用户名密码错误等,当程序被这些节外生枝的障碍打断时,空引用异常就极有可能被引发。 比如说,原本我们调用一个方法,这个方法会执行连接
用户1608022
2018/04/11
7.7K0
如何判断环境变量为空
今天在看 Spark 的脚本的时候,发现很多变量都有用到 {VARIABLE+x} 这种格式,如下:
runzhliu
2020/08/06
1.4K0
如何判断环境变量为空
如何优雅判断属性值为空
假设我们现在需要取出 a.b.c,但是并不清楚它们是否都存在,那么代码会写成这样:
前端达人
2019/12/24
4.1K0
如何优雅判断属性值为空
python 如何判断字典是否为空?
在python里,{},[],(),等都等价于False! if dict: print 'not Empty'
py3study
2020/01/09
21.4K0
C# 4.0命名参数和可选参数
Named And Optional Arguments - 命名参数和可选参数
跟着阿笨一起玩NET
2018/09/18
6060
C#新功能--命名参数与可选参数
  可能是篇幅太短了,又被打入冷宫了.先重发一篇加上可选参数.本来不想加这个呢,因为可选参数可能大家用的会多点.其实这 两个在VB中早就有了,C#中,在.net4发布之前是不能使用的.看到这个比较兴奋,我想大家也有好多人不知道,所以就强烈的想与大家 分享一下. 一、命名参数    命名参数会潜在的改变编写代码的方式.这个新功能能使代码更容易阅读和理解. 例如,看一下System.IO名称空间中的File.Copy()方法,它一般构建为 File.Copy(@"C:\mytestFile.txt",@"C:
hbbliyong
2018/03/05
1.1K0
如何基于 Swagger 使用 OpenAPI Generator 生成 JMeter 脚本?
作为性能工程师,我们花了大量的时间编写脚本。如果我们能找到一种能自动生成脚本的方法,那将是一个提高的能效的好事情。
高楼Zee
2021/03/16
5.3K0
JS如何使用隐藏控件为表单添加参数
在一些前端动态网页的表单里,并不是所有的参数都需要填写或选择,有些需要隐藏起来,然后跟着小单一起提交传递给后台,发送到服务器端
itclanCoder
2023/02/26
11.2K0
JS如何使用隐藏控件为表单添加参数

相似问题

springdoc-openapi不同示例

139

Spring boot可重用的springdoc-openapi参数注释

13

springdoc-openapi通用控制器类型参数支持

138

使用springdoc-openapi和spring-boot-starter- OpenAPI -mongodb生成数据文档

22

使用springdoc-openapi的accept标头的默认值

186
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档