当前位置: 首页 > 知识库问答 >
问题:

嵌套对象中的OpenApi必需属性不起作用

方河
2023-03-14

我需要描述一个api,在请求体中有一个带有必填字段的对象,其中一个字段是一个对象本身,它有另一组必填字段。

我正在使用开放api v3和swagger编辑器(https://editor.swagger.io/)在我把我的。将yaml文件放到编辑器上,我生成了一个html客户端(

Table of Contents
body
secureoauthservicesv2Nested_nestedobj
body
id
Integer id of nested obj
nestedobj
secureoauthservicesv2Nested_nestedobj
secureoauthservicesv2Nested_nestedobj
nested object
field1 (optional)
String
field2 (optional)
String

我希望字段1是必需的,字段2是可选的,但事实并非如此。

这是我的。yaml文件

openapi: 3.0.0
info:
    title: Example API
    description: Example API specification
    version: 0.0.1
servers:
  - url: https://example/api

paths:
  /secure/oauth/services/v2/Nested:
    post:
      summary: Try nested
      description: Used to post Nested obj
      requestBody:
        required: true
        content:
          application/json:
            schema:
                type: object 
                required:
                - id
                - nestedobj
                properties:
                    id:
                      type: integer
                      description: id of nested obj
                    nestedobj:
                      type: object 
                      required:
                      - field1
                      description: nested object
                      properties:
                        field1:
                          type: string
                        field2:
                          type: string
      responses:
        '200':
          description: Nested object OK

共有1个答案

陈开宇
2023-03-14

解决了的!

我使用了组件和模式,但我认为这可能是一个bug,这在swagger editor repo上引发了一个问题:https://github.com/swagger-api/swagger-editor/issues/1952

openapi: 3.0.0
info:
    title: Example API
    description: Example API specification
    version: 0.0.2
servers:
  - url: https://example/api

paths:
  /secure/oauth/services/v2/Nested:
    post:
      summary: Try nested
      description: Used to post Nested obj
      requestBody:
        required: true
        content:
          application/json:
            schema:
                type: object 
                required:
                - id
                - nestedobj
                properties:
                    id:
                      type: integer
                      description: id of nested obj
                    nestedobj:
                      $ref: '#/components/schemas/nestedobj'
      responses:
        '200':
          description: Nested object OK

components:
  schemas:
    element:
      type: object
      required:
      - fieldArray1
      properties:
        fieldArray1:
          type: string
          description: field array
        fieldArray2:
          type: number
    nestedobj:
      type: object
      required:
      - field1
      description: nested object
      properties:
        field1:
          $ref: '#/components/schemas/woah'
        field2:
          type: string
    woah:
      type: object
      required:
      - woahthis
      description: woah this
      properties:
        field3:
          type: array
          items:
            $ref: '#/components/schemas/element'
        woahthis:
          type: number
          description: numeber woah this

编辑:2019年4月,我在swagger codegen github中打开了一个bug,但它仍然没有任何回应

 类似资料:
  • 问题内容: 我尝试使用以下代码将必填字段告知必填字段,但在Safari浏览器中不起作用。码: 上面的代码在firefox中工作。 您可以让我知道JavaScript代码或任何workarround吗? 是javascript新功能 谢谢 问题答案: Safari(自2017年3月26日起最新版本10.1)不支持此属性,您需要使用JavaScript。 该页面包含一个hacky解决方案,该解决方案应

  • 我正在尝试反序列化一个 JSON 响应,其中包含一些标准字段和一个包含子类属性的 嵌套对象,例如: 字段< code>id和< code>type是标准的,所以我有一个基类< code>Base,然后扩展一些更具体的类: 如何让杰克逊读取 对象作为进一步字段值的来源?我假设我需要创建一个自定义反序列化程序,但我不确定如何具体完成此操作。

  • 我有一个带有嵌套引用的OpenAPI 3.0定义: 当我单击 Swagger UI 中的请求选项卡时,它显示一个错误: 无法解析引用,因为:无法解析指针:文档中不存在 /components/schemas/components/schemas/Address 实际上,< code >地址引用应该仅是< code >/components/schemas/。我不确定它为什么引用< code >/c

  • 我试图使用第三方公司提供的Swagger模式生成Java模型,但生成失败或没有生成我期望的对象。我不确定是生成器还是模式出了问题。 本质上,模式有一个带有属性“attributes”的父对象Pet,其中“attributes”有一个属性“size”。该模式还有一个子对象Cat,它“继承”自Pet(在“all of”语句中引用Pet),并且它本身有一个属性“attributes”和嵌套属性“Whis

  • 问题内容: 我有一个对象,它可以是任何数量的深度,并且可以具有任何现有属性。例如: 在此我想设置(或覆盖)属性,如下所示: 属性字符串可以具有任何深度,并且值可以是任何类型/事物。 如果属性键已经存在,则不需要合并对象和数组作为值。 前面的示例将产生以下对象: 如何实现这种功能? 问题答案: 此函数使用您指定的参数应添加/更新容器中的数据。请注意,您需要跟踪架构中的哪些元素是容器,哪些是值(字符串