swagger Jschema Validation不验证在架构中使用$ref声明的数组对象

h79rfbju  于 2023-06-05  发布在  其他
关注(0)|答案(2)|浏览(623)

当在架构中使用$ref声明项目时,JSON架构验证不会验证Array项目。它允许对象中存在模式中不存在的其他属性,尽管additionalProperties在根模式对象中设置为False。下面是一个示例模式json schema,您可以在其中重现这个问题。

{
  "StudentDetails": {
    "$ref": "#"
  },
  "Student":
  {
     "type": "object",
     "properties": {
        "name": {
            "description": "A link that can be used to fetch the next batch of results. The link contains an opaque continuation token.",
            "nullable": "true",
            "type": "string"
        },
        "age": {
            "description": "The average rating of the title",
            "type": "number",
            "format": "double"
        }
     }
  },
  "type": "object",
  "additionalProperties": false,
  "unevaluatedItems": false,
  "unevaluatedProperties": false,
  "properties": {
    "Students": {
      "type": "array",
      "items": {
        "$ref": "#/Student"
      }
    }
  }
}

这里有一个示例对象,理想情况下应该失败验证,但它实际上成功了。

{
           ""Students"": [
                {
                     ""name"": ""X""
                },
                {
                     ""age"": 20
                },
                {
                     ""height"": 6
                }
           ]
         }

我预计JSCema验证会失败,说明“height”属性未求值。
我只在数组中看到这个问题。任何直接的对象验证都可以很好地工作,即使是嵌套的对象结构。
有人能帮我解决这个问题吗?
我正在测试JSchema验证器的边缘情况,遇到了这个问题,Array对象没有被正确验证。

biswetbf

biswetbf1#

JSON Schema规范没有同时接受"nullable": truenull被添加为可能的type)和"unevaluatedProperties": false的版本。您使用的是什么实现?无论如何,它是错误的,因为在items中使用$ref是完全有效的。

yv5phkfx

yv5phkfx2#

你有没有试过在Student声明本身设置additionalProperties

{
  // ..
  "Student":
  {
     "type": "object",
     "additionalProperties": false, // try this
     "properties": {
        // ...
     }
  },
  "type": "object",
  "additionalProperties": false,
  // ...
}

相关问题