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

使用org.jsonschema2pojo时JSON Schema引用重复生成POJO文件问题

解决org.jsonschema2pojo重复生成引用Schema对应的POJO问题

问题场景

使用org.jsonschema2pojo工具将JSON Schema转换为Java POJO时,Schema B通过$ref引用Schema A,但生成B的POJO文件时,工具未复用已生成的A类,反而生成了内容完全一致的重复类,导致无法在多个Schema间复用公共POJO,只能手动强制类型转换。

示例Schema:
Json Schema A:

{
  "$schema": "https://json-schema.org/draft/2020-12/schema#",
  "$id": "https://example.com/schemas/A",
  "description": "Some Json Schema",
  "type": "object",
  "properties": {
    "genericInfo": {
      "type": "string",
      "description": "Some generic info"
    }
  },
  "required": ["genericInfo"]
}

Json Schema B:

{
  "$schema": "https://json-schema.org/draft/2020-12/schema#",
  "$id": "https://example.com/schemas/B",
  "description": "Some Json Schema B",
  "type": "object",
  "properties": {
    "referenceToA": {
      "$ref": "../jsonSchemaA.json"
    }
  }
}

解决方案

1. 改用绝对$id引用

将Schema B中的相对文件路径引用替换为Schema A的$id绝对路径,让工具能识别这是同一个Schema定义:

"referenceToA": {
  "$ref": "https://example.com/schemas/A"
}

2. 配置工具启用类重用策略

Maven插件配置

在pom.xml的插件配置中添加以下参数:

<plugin>
    <groupId>org.jsonschema2pojo</groupId>
    <artifactId>jsonschema2pojo-maven-plugin</artifactId>
    <version>你的工具版本</version>
    <configuration>
        <!-- 启用重用已生成的类 -->
        <reuseExistingClasses>true</reuseExistingClasses>
        <!-- 基于Schema的$id识别唯一类 -->
        <useSchemaId>true</useSchemaId>
        <!-- 禁用用title作为类名,避免冲突 -->
        <useTitleAsClassName>false</useTitleAsClassName>
    </configuration>
</plugin>

Java API配置

如果直接使用Java API调用工具,设置对应配置项:

GenerationConfig config = new DefaultGenerationConfig() {
    @Override
    public boolean isReuseExistingClasses() {
        return true;
    }
    @Override
    public boolean isUseSchemaId() {
        return true;
    }
    @Override
    public boolean isUseTitleAsClassName() {
        return false;
    }
};

// 后续使用该config生成POJO

3. 确保扫描范围包含所有依赖Schema

生成POJO时,将Schema A和Schema B所在的目录都纳入工具的扫描范围,让工具能提前解析到Schema A的定义,处理Schema B时直接复用已生成的类。

问题说明

这是org.jsonschema2pojo的常见问题,根源在于:

  • 相对文件路径的$ref无法被工具识别为指向同一个Schema定义;
  • 默认配置未启用类重用策略,导致工具遇到相似结构就重新生成类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:12:04