【问题标题】:Generate JSON schema from Java class从 Java 类生成 JSON 模式
【发布时间】:2014-11-29 17:42:39
【问题描述】:

我有一个 POJO 类:

public class Stock {
 int id;
 String name;
 Date date;
}

是否有任何注释或开发框架/API 可以将 POJO 转换为 JSON 模式,如下所示:

{"id":
      {             
        "type" : "int"
      },
"name":{   
        "type" : "string"
       }
"date":{
        "type" : "Date"
      }
}

我还可以通过在 POJO 上指定一些注释或配置来扩展架构以添加"Required" : "Yes"、每个字段的描述等信息,并且可以生成如下所示的 JSON 架构:

{"id":
      {             
        "type" : "int",
        "Required" : "Yes",
        "format" : "id must not be greater than 99999",
        "description" : "id of the stock"
      },
"name":{   
        "type" : "string",
        "Required" : "Yes",
        "format" : "name must not be empty and must be 15-30 characters length",
        "description" : "name of the stock"
       }
"date":{
        "type" : "Date",
        "Required" : "Yes",
        "format" : "must be in EST format",
        "description" : "filing date of the stock"
      }
}

【问题讨论】:

  • 不,将 pojo 转换为 json 对象。我正在寻找生成 JSON 模式作为元 [有关映射到 pojo 字段的输入表单字段的信息,如数据类型,是否需要等,] 给最终用户)。
  • 这里是一个在线站点,它将从 json 生成 json 模式:jsonschema.net
  • 其实我不是在寻找任何工具。我需要一个可以有帮助类或注释的 api 来描述 pojo 中字段的行为。例如。我今天最近发现jackson 2.4.1 有新的注释@JsonPropertyDescription 来将描述添加到pojo 中的字段; [链接]stackoverflow.com/questions/24515917/….有没有可能通过反射来实现我帖子中的示例?

标签: json jackson jsonschema fasterxml jackson-modules


【解决方案1】:

Jackson JSON Schema 模块就是一个这样的工具:

https://github.com/FasterXML/jackson-module-jsonSchema

它使用 Jackson 数据绑定的 POJO 自省来遍历 POJO 属性,同时考虑到 Jackson 注释,并生成 JSON Schema 对象,然后可以将其序列化为 JSON 或用于其他目的。

【讨论】:

  • 如果您的复杂对象包含需要保持枚举的枚举类型,则您指定的模块不起作用。请参阅下面的答案以获得更好的工具(仍然是杰克逊,但杰克逊映射器。)链接中的说明导致枚举在架构中呈现为简单字符串
  • 是的,我看到了一个错误报告。我希望我们为该模块获得更多的贡献者——它是外部贡献,被广泛使用,但目前还没有专门的所有者。
  • 投反对票...不是因为它是一个糟糕的答案,只是因为它对今天来说是一个糟糕的答案。该库不再维护。
【解决方案2】:

Java JSON 模式生成器:https://github.com/victools/jsonschema-generator

使用 Jackson 从 Java 类创建 JSON Schema(Draft 6、Draft 7 或 Draft 2019-09)。

【讨论】:

    【解决方案3】:

    使用 JJschema。它可以生成符合草案 4 的 JSON 模式。详情请参考这篇帖子http://wilddiary.com/generate-json-schema-from-java-class/

    虽然Jackson Json Schema module 也可以生成架构,但截至目前,它只能生成符合草案 3 的架构。

    【讨论】:

    【解决方案4】:
    public static String getJsonSchema(Class clazz) throws IOException {
             Field[] fields = clazz.getDeclaredFields();
             List<Map<String,String>> map=new ArrayList<Map<String,String>>();
             for (Field field : fields) {
                 HashMap<String, String> objMap=new  HashMap<String, String>();
                 objMap.put("name", field.getName());
                 objMap.put("type", field.getType().getSimpleName());
                 objMap.put("format", "");
                 map.add(objMap);
             }
             ObjectMapper mapper = new ObjectMapper();
             String json = mapper.writeValueAsString(map);
    
           return json;
        }
    

    【讨论】:

      猜你喜欢
      • 2013-03-08
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      • 2021-12-05
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多