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

使用com.networknt的json-schema-validator报No suitable validator for id如何解决

问题原因与修复方案

1. 报错直接原因

你使用的json-schema-validator库针对JSON Schema 2019-09规范,将id识别为普通校验关键字而非Schema标识字段,找不到对应的校验逻辑所以抛出异常。
JSON Schema从Draft 08(也就是2019-09版本)开始,Schema的唯一标识字段已从id调整为$id,你当前Schema里的id字段不符合你指定的V201909版本规范。

2. 报错修复方法

二选一即可:

  • 方式1(推荐):修改Schema定义,把"id" : "urn:jsonschema:x:x:x:x:x:x:x:x:Class_name"改为"$id" : "urn:jsonschema:x:x:x:x:x:x:x:x:Class_name",符合2019-09版本规范
  • 方式2:若要保留原有id写法,将初始化Schema工厂的版本标记改为旧版本,比如VersionFlag.V7(Draft 07及更早版本用id作为Schema标识字段)

3. 收集所有错误字段的实现

你当前使用的schema.validate(node)方法本身默认就会返回所有校验不通过的结果,不会提前终止,你只需遍历返回的Set<ValidationMessage>,提取每个对象的getPath()(错误字段路径)、getMessage()(错误描述)字段,即可整理出所有错误字段的列表。
如果校验时默认只返回第一个错误,可以在构造Schema工厂时传入配置关闭快速失败:

JsonSchemaFactory factory = JsonSchemaFactory.builder(JsonSchemaFactory.getInstance(VersionFlag.V201909))
        .addConfigurations(config -> config.setFailFast(false))
        .build();

4. JSON键合法性校验方案

如果需要校验输入JSON的所有键是否符合预期(禁止出现未定义的键),可以在Schema顶层添加"additionalProperties": false配置:

{
  "type" : "object",
  "$id" : "urn:jsonschema:x:x:x:x:x:x:x:x:Class_name",
  "properties" : {
    // 你定义的合法字段
  },
  "additionalProperties": false
}

开启后输入JSON出现Schema未定义的键时,会触发校验错误,你可以从结果中拿到所有非法的键名。如果需要支持符合特定正则规则的动态键,可以搭配patternProperties配置实现。

内容的提问来源于stack exchange,提问作者Disteonne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:24:03