如何在JSON Schema层面配置规则禁止未定义额外键通过校验
JSON Schema 禁止未定义字段配置方案
要实现禁止schema未定义的键通过校验,只需要在object类型的schema根节点下添加"additionalProperties": false配置即可,不需要使用anyOf/allOf/oneOf相关规则。
你现有的schema存在两处问题:
required字段错误写在了properties对象内部,正确位置应该和properties平级- 缺少
additionalProperties: false配置来限制额外字段
修正后的完整schema如下:
{ "$schema": "https://tools.ietf.org/html/draft-zyp-json-schema-03", "title": "ResponseMessageBody", "type": "object", "additionalProperties": false, "properties": { "messagename": { "type" : "string" }, "Offset": { "type": "number", "minimum": 0, "maximum": 4 }, "Interval": { "type": "number", "minimum": 0, "maximum": 10 }, "KeyIndex": { "type": "number", "minimum": 0, "maximum": 15 }, "Timestamp": { "type": "string", "minLength": 24, "maxLength": 24 }, "SeqNumber": { "type": "number", "minimum": 0, "maximum": 4294967295 }, "Current": { "type": "number", "minimum": 0, "maximum": 4294967295 } }, "required" : ["messagename"] }
配置后可完全满足你的需求:
- 必填字段
messagename存在时,其他可选字段可传可不传,校验通过 - 出现任意
properties中未定义的键(比如拼写错误的Interval1),校验直接失败 - 不需要在业务代码中加额外校验逻辑,完全由schema规则实现
如果你的实际需求是所有字段都必填,直接把required数组修改为包含所有字段名即可,之前添加的anyOf规则可以完全删除。
内容的提问来源于stack exchange,提问作者alshamsh93
相关产品推荐
相关产品推荐

