1

Type.json (枚举)

{
    "type" : "string",
    "$schema" : "http://json-schema.org/draft-04/schema#",
    "title": "type resource",
    "name": "type resource",
    "description": "List of types",
    "id" : "type:v1",
    "enum" : 
        [
        "ACC1",
        "ACC2"
        ]
}

Pojo1.json

"properties":{
            "type" : {
                "$ref" : "Type.json"
            },
}

Pojo2.json

"properties":{
            "type" : {
                "$ref" : "Type.json"
            },
}

它不是为枚举创建一个单独的 java 文件,而是在其中一个 POJO 中创建一个枚举,并且这个内部公共枚举由另一个 POJO 引用。

Pojo2.java

private com.Pojo1.Type type;

如何为 enum 创建一个单独的 java 文件?谢谢

4

2 回答 2

3

jsonschema2pojo 作为选项支持创建枚举,因为它看起来不像创建枚举。

枚举的生成由org.jsonschema2pojo.rules.EnumRule进行

其中的javadoc指出:

一个 Java {@link Enum} 被创建,其中每个枚举值都存在于模式中。枚举名称派生自 nodeName,枚举类型本身被创建为所属类型的内部类。在极少数情况下不存在拥有类型(枚举是模式的根),那么枚举本身就成为一个公共类。

听起来您需要提出功能请求

于 2016-03-03T15:17:34.133 回答
3

在撰写本文时,jsonschema2pojo 库中已经有一个可用的功能。在我的调查过程中,我看到了这篇文章,对无法引用生成的类或枚举的答案不满意。所以我在文档中挖掘得更深一些,它确实给了我一些额外的扩展属性到通常的 json 模式规范(javaTypes、javaInterfaces、javaEnumNames、javaJsonView、javaName)。扩展属性 javaType 的文档指出:

jsonschema2pojo 支持适用于模式的扩展属性“javaType”,并允许您为生成的 Java 类型指定完全限定名称。

鉴于这些知识,您的示例需要像这样重写:

Type.json (枚举)

{
    "$schema" : "http://json-schema.org/draft-04/schema#",
    "type" : "string",
    "title": "type resource",
    "name": "type resource",
    "description": "List of types",
    "id" : "type:v1",
    "type_enum": {
      "javaType" : "com.mycompany.TypeEnum",
      "$ref": "TypeEnum.json#/definitions/type_enum"
    }
}

我们现在用引用$ref替换您的枚举定义,其中包括javaType的专用包路径和类名。类型类中相应枚举的引用 json 模式将如下所示:

TypeEnum.json (枚举)

 {
  "$schema": "http://json-schema.org/draft-04/schema#",
  "definitions": {
    "type_enum": {
      "enum": [
        "ACC1",
        "ACC2"
      ],
      "description": "All values for the enum in the type class."
    }
  }
}

Pojo 定义 Pojo1 和 Pojo2 保持不变。您甚至可以像这样在其他类中引用枚举:

TypeV1_1.json(枚举)

{
    "$schema" : "http://json-schema.org/draft-04/schema#",
    "type" : "string",
    "title": "type version 1.1 resource",
    "name": "type version 1.1 resource",
    "description": "List of version 1.1 types",
    "id" : "type:v1_1",
    "type_enum": {
      "javaType" : "com.mycompany.TypeEnum",
      "$ref": "TypeEnum.json#/definitions/type_enum"
    }
}

让您始终只为您定义的 javaType 生成一个枚举。

于 2016-07-24T22:36:12.973 回答