[英]JSON Schema to POJO - Enum as a separate java file
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 文件? 谢谢
它看起来不像在 jsonschema2pojo 中作为选项支持将枚举创建为单独的类。
枚举的生成由org.jsonschema2pojo.rules.EnumRule 执行
其中的 javadoc 指出:
创建了一个 Java {@link Enum},其中包含模式中存在的每个枚举值的常量。 枚举名称派生自 nodeName,枚举类型本身被创建为拥有类型的内部类。 在不存在拥有类型(枚举是模式的根)的极少数情况下,枚举本身就成为一个公共类。
听起来您需要提出功能请求
在撰写本文时,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 生成一个枚举。
这可能是我这样做的:
"atributes": {
"description": "Additional message attributes",
"type": "object",
"properties": {
"action": {
"description": "Action to do over document",
"$ref" : "Action.json#"
}
},
"additionalProperties": false,
"examples": "{\"action\":\"UPSERT\"}"
}
和动作枚举:
{
"title": "Action",
"description": "Action description",
"type": "string",
"enum": [
"BATCH",
"DELETE",
"UNSUPPORTED"
],
"javaEnumNames": [
"UPSERT",
"DELETE",
"UNSUPPORTED"
]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.