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

如何在OpenAPI 3.0中定义required和anyof属性

欧阳声
2023-03-14

我正在为一个api创建一个OpenAPI 3规范,该API具有需要某些属性的对象,对于某些属性,它们是任何对象。当我创建如下规范时,它会抛出一个错误,我无法修复。

EnrollementRequest:
      type: object
      properties:
        consent:
          $ref: "#/components/schemas/ConsentEnum"
        cid:
          $ref: '#/components/schemas/CID'
        card:
          $ref: '#/components/schemas/Card'
        enrollmentDateTime :
          description: The date and time of enrollment with respective timezone
          format: date-time
          example: 2018-11-13T20:20:39+00:00
        campaign_code: 
          description: the campaign-code for which customer wants to enroll
          type: string
        offer_code:
          description: the offer-code for which customer wants to enroll
          type: string
        channelInfo:
          $ref: '#/components/schemas/Channel'
      required:
        - consent
        - cid
        - enrollmentDateTime
        - channelInfo
      anyOf:
        - campaign_code
        - offer_code       

Swagger编辑器给出了如下错误 -

Errors

Structural error at components.schemas.EnrollementRequest.anyOf.0
should be object
Jump to line ...
Structural error at components.schemas.EnrollementRequest.anyOf.1
should be object
Jump to line ...

在使用如下建议时

  anyOf:
    - required: [campaign_code]
    - required: [offer_code]

验证错误消失了,但swagger编辑器模式/模型视图未显示任何内容,如下所示 -

共有1个答案

齐甫
2023-03-14
      anyOf:
        - required: [campaign_code]
        - required: [offer_code] 

另外,为了使其在Swagger编辑器中看起来更好:

    EnrollementRequest:
      type: object
      properties:
        consent:
          $ref: "#/components/schemas/ConsentEnum"
        cid:
          $ref: '#/components/schemas/CID'
        card:
          $ref: '#/components/schemas/Card'
        enrollmentDateTime :
          description: The date and time of enrollment with respective timezone
          format: date-time
          example: 2018-11-13T20:20:39+00:00
        channelInfo:
          $ref: '#/components/schemas/Channel'
      required:
        - consent
        - cid
        - enrollmentDateTime
        - channelInfo
      anyOf:
        - properties:
            campaign_code: 
              description: the campaign-code for which customer wants to enroll
              type: string
          required: [campaign_code] 
        - properties: 
            offer_code:
              description: the offer-code for which customer wants to enroll
              type: string
          required: [offer_code] 
 类似资料:
  • 但是在OpenAPI3.0.0中,参数被请求体替换,我找不到定义头参数的方法,这将进一步用于身份验证。 在OpenAPI3.0.0中定义请求头的正确方法是什么?

  • 我尝试使用swagger来描述JSON API。到目前为止,它看起来不错,但我无法弄清楚如何使用anyOf结构在JSON答案中定义不同对象类型的数组。 以下JSOn模式是有效的,它应该描述一组文章和视频JSON对象: 有没有可能在摇摆不定中使这项工作发挥作用?

  • 我在SwaggerHub注册,并使用OpenAPI3.0创建了一个新的API。在我的API中,路径有2个非必需参数,但我不能将它们设置为not required--编辑器显示“not alleving values”错误。 以下是我的API定义: 但是,如果删除属性,则会出现2个错误: 什么是有效的语法?

  • 我使用JAXB根据一些XSD模式生成java类。对于以下元素: <代码> jaxb生成以下代码: 问题是我们需要使用一些依赖于getter/setter方法命名约定的专有XML工具,例如,对于字段REC_LOC他们希望使用名为getRecLoc(String value)和setRecLoc()的方法,而不是getRECLOC()。 有没有办法自定义jaxb生成的方法名?

  • 我使用swagger生成类在Java和类型脚本。我有问题定义映射属性与对象列表为值。我试图定义如下: 上面的yml定义在java中生成以下代码: 如何配置yml以生成包含数据列表的密钥?类似于下面的类: 或 这是否可能与大摇大摆2.0?我正在考虑定义另一个扩展ArrayList的DataList类,然后将该类用作映射的值。 --------------更新 谢谢@nickb 我使用swagger-

  • 我需要为搜索API定义Swagger/OpenAPI V3.0文件。我的请求可以指定地理空间坐标(经度和纬度)或(邮政编码和国家代码)或(城市和州和国家代码)。除了这些,我还有几个更强制的属性,比如距离和距离单位。 我知道如何在JSON模式中做到这一点 但我很难用大摇大摆的方式来定义它。OpenAPI3.0允许One of和anyOf构造,但如果我试图在required部分使用它,swagger