JSON Schema必填布尔字段校验失效问题咨询
问题原因分析
默认值配置绕过必填校验
你的own字段设置了"default": false,部分JSON Schema校验器默认会自动为缺失的必填字段注入默认值,导致required校验被绕过——校验器认为字段已通过默认值填充,所以请求能通过。无效的必填字段配置
你的required数组里包含了未在properties中定义的type字段,这属于无效配置。部分校验器遇到这种情况时,可能会忽略整个required规则,或出现逻辑异常,导致closed、own等合法必填字段的校验失效。校验器模式问题
若校验器未启用严格模式,可能会对布尔类型字段进行宽松的类型转换,或跳过严格的类型校验,导致类型错误的请求通过。
修复方案
针对上述问题,按以下步骤调整Schema和校验器配置:
移除必填布尔字段的默认值
既然own是必填字段,无需设置默认值,直接删除"default": false配置,确保缺失字段时触发必填校验。修正
required数组
删除required中未定义的type字段,确保所有必填字段都在properties中有对应定义。启用校验器严格模式
确保你的JSON Schema校验器启用严格模式,禁用自动默认值注入和类型转换。以常用的Ajv为例,初始化时需设置:const ajv = new Ajv({ strict: true, useDefaults: false })
修正后的JSON Schema
{ "$schema": "http://json-schema.org/draft-07/schema#", "title": "someSchema", "type": "object", "description": "template", "properties": { "own": { "type": "boolean" }, "space": { "type": "string" }, "card": { "type": "string" }, "closed": { "type": "boolean" }, "id": { "type": "string" } }, "required": [ "id", "closed", "own" ] }
验证效果
调整后,以下情况都会触发校验错误:
- 缺失
own或closed字段 own或closed传入非布尔类型值(如字符串"blablabla")- 缺失
id字段(保持原有正确的必填校验逻辑)
内容的提问来源于stack exchange,提问作者vVv
相关产品推荐
相关产品推荐

