You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSON Schema必填布尔字段校验失效问题咨询

问题原因分析
  1. 默认值配置绕过必填校验
    你的own字段设置了"default": false,部分JSON Schema校验器默认会自动为缺失的必填字段注入默认值,导致required校验被绕过——校验器认为字段已通过默认值填充,所以请求能通过。

  2. 无效的必填字段配置
    你的required数组里包含了未在properties中定义的type字段,这属于无效配置。部分校验器遇到这种情况时,可能会忽略整个required规则,或出现逻辑异常,导致closed、own等合法必填字段的校验失效。

  3. 校验器模式问题
    若校验器未启用严格模式,可能会对布尔类型字段进行宽松的类型转换,或跳过严格的类型校验,导致类型错误的请求通过。

修复方案

针对上述问题,按以下步骤调整Schema和校验器配置:

  1. 移除必填布尔字段的默认值
    既然own是必填字段,无需设置默认值,直接删除"default": false配置,确保缺失字段时触发必填校验。

  2. 修正required数组
    删除required中未定义的type字段,确保所有必填字段都在properties中有对应定义。

  3. 启用校验器严格模式
    确保你的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 15:40:24