【问题标题】:JSON Schema validate non empty bodyJSON Schema 验证非空正文
【发布时间】:2021-05-06 00:36:44
【问题描述】:

我正在使用 JSON Schema 验证 API Gateway 请求,我还没有意识到它允许空请求,所以我想知道是否有一种方法可以通过模式验证我实际收到的东西。

这是我拥有的架构示例:

{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "PutPetRequest",
"description": "Accepts a request to create or update a Pet.",
"type": "object",
"required": ["pet"],
"additionalProperties": false,
"properties": {
    "pet": {
        "description": "Pet object type",
        "type": "object",
        "required": [
            "id"
        ],
        "additionalProperties": false,
        "properties": {
            "id": {
                "type": "string",
                "format": "uuid"
            }
        }
    }
}

}

一个空对象 {} 将无法通过验证,但 (empty, nothing) 通过,我尝试了 minPropertiesminItems 但我看到了相同的行为,这不可能吗?

我正在使用 https://www.jsonschemavalidator.net/ 进行测试

【问题讨论】:

    标签: json schema aws-api-gateway jsonschema serverless


    【解决方案1】:

    JSON Schema 验证 JSON 实例。空字符串不是有效的 JSON 实例。因此,JSON Schema 不能说什么。那里什么都没有,所以没有什么可以验证的。因此,它不是真假。 JSON 确实有 null 值,但 null 不同。

    所以,这不是 JSON Schema 可以表达的。它似乎是 AWS API Gateway 中的一个边缘案例。我不确定是否有解决办法,但没有 JSON Schema 解决方案。

    【讨论】:

    • 我很惊讶框架在给定 Content-Type: application/json and content = 的请求正文时没有抛出异常——或者简单地将其解释为 json ' null',然后可以使用 JSON Schema 进行验证。
    【解决方案2】:

    我遇到了类似的情况,将 minLength 设置为 1,这需要至少 1 个字符。我知道这不是一个完美的解决方案,但这可以作为一种解决方法。

    scope: {
            title: 'my property',
            description: 'description about my property',
            type: JsonSchemaType.STRING,
            minLength: 1,
          },
    

    【讨论】:

      猜你喜欢
      • 2014-04-29
      • 2021-04-18
      • 1970-01-01
      • 2019-10-18
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-13
      相关资源
      最近更新 更多