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

使用allOf和其他属性进行Swagger数据验证

严瀚昂
2023-03-14

"deliveryContact": {
      "allOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 1024
            },
            "phone": {
              "type": "string",
              "maxLength": 24
            }
          }
        },
        {
          "$ref": "#/definitions/address"
        }
      ]
    },
    "address": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "address": {
          "type": "string",
          "maxLength": 1024
        },
        "postalCode": {
          "type": "string",
          "maxLength": 12
        },
        "city": {
          "type": "string",
          "maxLength": 512
        },
        "state": {
          "type": "string",
          "maxLength": 512
        }
      }
    },

样本数据

                   delivery: {
                        address: 'my address',
                        postalCode: 'my postalCode',
                        city: 'my city',
                        state: 'my state',
                        name: 'my name',
                        phone: 'my phone'
                    },

我使用AJV 6.10.0来验证我的数据,但我认为我有一个错误的模式定义。带Ajv选项:

        ajv = require('ajv')({
            allErrors: true,
            verbose: true,
            removeAdditional: false,
        });

实际上,我有6个错误,警告每个属性的其他属性

在验证allOf(姓名和电话)中的第一个对象时,验证在(地址、邮政编码、城市和州)中发现错误

如果我删除了第一个allOf对象(姓名、电话)的附加属性,在验证地址架构的过程中,验证会在(姓名和电话)上发现错误

如何解决模式定义

共有1个答案

燕寒
2023-03-14

JSON 架构

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "required": [
    "delivery"
  ],
  "properties": {
    "delivery": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "name",
        "phone",
        "address"
      ],
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 1024
        },
        "phone": {
          "type": "string",
          "maxLength": 24
        },
        "address": {
          "$ref": "#/definitions/address"
        }
      }
    }
  },
  "definitions": {
    "address": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "address": {
          "type": "string",
          "maxLength": 1024
        },
        "postalCode": {
          "type": "string",
          "maxLength": 12
        },
        "city": {
          "type": "string",
          "maxLength": 512
        },
        "state": {
          "type": "string",
          "maxLength": 512
        }
      }
    }
  }
}

样本数据

{
  "delivery": {
    "address": {
      "address": "myaddress",
      "postalCode": "mypostalCode",
      "city": "mycity",
      "state": "mystate"
    },
    "name": "myname",
    "phone": "myphone"
  }
}

如果你想测试它,你可以在这里做:https://www.jsonschemavalidator.net/

 类似资料:
  • 我正试图通过使用< code>allOf来解决这个swagger API继承的问题。这是我的swagger yaml文件。 当我将其粘贴到在线编辑器中时,我收到以下错误,我很难弄清楚。

  • 在这里输入image description我有一个如下所示的json模式,我希望根据B和C的值将定义加载到D和E中,为此我已经编写了所有的条件。我使用json-schema-validator在应用程序中进行json模式验证。 javaCode看起来像

  • 我看了已经问过的问题,但没有一个能够解决我的问题。 < code > https://stack overflow . com/questions/45534187/path-and-formdata-parameter-at-same-time < code > https://stack overflow . com/questions/50562971/swagger-editor-show

  • 我正在寻找一种解决方案,使用Jackson基于同一POJO中的其他属性值序列化POJO对象属性 如果某个属性值符合某些条件,则应根据要求更改其他属性值 例如,下面是我的JSON对象: 在上述情况下,如果的值符合某些条件,那么我应该能够更改的值 为什么需要这样做: 是一个配置对象 和-是配置设置 在上面的例子中,中有一个是,我需要屏蔽/更改相应的 还要补充一点,在这个例子中,属性是和,但是如果我们找

  • 问题内容: 我正在使用以下代码将字符串解析为DOM: 哪里是这样的。 给我。如果我做类似的事情,我会得到一个DOM对象。但是,如果像往常一样尝试访问任何属性,它将为我提供: 其他属性也是如此,例如。另一方面,属性检索很好。 是否有魔术功能可以访问这些属性? 问题答案: 您的当前方法失败,因为未为给定XML文档定义HTML属性。如果提供MIME类型,则该方法应该起作用。 下面的代码为尚不支持它的浏览

  • 我在“放心”方面的经验有限。我们有很多测试,我通常可以在google中找到示例,或者失败,但当我尝试匹配匿名数组中元素的嵌套属性,并验证属性上下(堂兄弟?)时,我会陷入困境。 示例 JSON: 我正在使用放心,我想在列表中找到等于LPM的元素,然后仅验证该元素的、和。 当我最初开始验证响应时,数组中只能有一个项目,因此我使用了: 但是,这不再保证工作,因为数组中可能有多个元素,并且顺序不保证。 我