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

如何通过$ref引用JSON Schema?war包中遇解析错误求助

解决networknt schema中相对路径$ref解析失败与UnknownHostException问题

针对相对路径$ref无法解析的解决方法

networknt的JSON Schema实现不会自动扫描目录加载依赖的Schema文件,必须手动将所有关联的Schema注册到加载器中,才能解析相对路径引用。

  1. 保持car.json中的相对路径$ref不变:
{
  "properties": {
    "date": {
      "$ref": "./genericPattern.json#/patterns/DatePattern"
    }
  }
}
  1. 加载Schema时,显式将两个文件都添加到SchemaLoader中:
// 从类路径加载两个Schema文件
JsonNode genericSchema = JsonLoader.fromInputStream(
    Thread.currentThread().getContextClassLoader().getResourceAsStream("genericPattern.json")
);
JsonNode carSchema = JsonLoader.fromInputStream(
    Thread.currentThread().getContextClassLoader().getResourceAsStream("car.json")
);

// 构建SchemaLoader并注册所有依赖Schema
SchemaLoader loader = SchemaLoader.builder()
    .addSchema(URI.create("genericPattern.json"), genericSchema)
    .addSchema(URI.create("car.json"), carSchema)
    .build();

// 加载并使用目标Schema
Schema schema = loader.loadSchema(carSchema);

针对$id导致UnknownHostException的解决方法

设置$id为远程URL时,networknt会尝试发起网络请求获取对应资源,当域名不存在时就会抛出UnknownHostException。解决方式是使用本地标识的$id:

  1. 给两个Schema文件设置本地$id(使用文件名或相对URI即可):
  • genericPattern.json:
{
  "$id": "genericPattern.json",
  "patterns": {
    "DatePattern": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    }
  }
}
  • car.json:
{
  "$id": "car.json",
  "properties": {
    "date": {
      "$ref": "./genericPattern.json#/patterns/DatePattern"
    }
  }
}
  1. 依然使用上面的SchemaLoader方式加载两个Schema,此时加载器会通过本地$id识别关联的Schema,不会发起远程请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:56:11