POJO的JSON Schema - Enum作为单独的java文件

时间:2016-03-03 12:34:19

标签: java json enums jsonschema jsonschema2pojo

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;

如何为枚举创建单独的java文件?感谢

2 个答案:

答案 0 :(得分:2)

它看起来像创建枚举,因为jsonschema2pojo支持单独的类作为选项。

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

执行

其中的javadoc声明:

  

创建了一个Java {@link Enum},其中包含每个枚举的常量   模式中存在的值。枚举名称派生自nodeName,   并且枚举类型本身被创建为拥有类型的内部类。   在极少数情况下,不存在拥有类型(枚举是其中的根)   (),然后enum本身就成了一个公共类。

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

答案 1 :(得分:2)

在撰写帖子时,jsonschema2pojo库中已有一个功能。在我的调查过程中,我遇到了这篇文章,并且对于无法引用生成的类或枚举的答案感到不满意。所以我在documentation中深入挖掘了一些,它确实为我提供了一些额外的扩展属性,通常用于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生成枚举。