在不修改JSON数据的情况下创建通用Java类

时间:2017-10-18 23:08:08

标签: json jsonschema2pojo

我有一个非常独特的用例,我有一些来自第三方的JSON数据,我无法修改。

{      
    "Information": {
        "mobile": {
            "name": "Mobile Application",
            "classType" : "A"
        },
        "desktop": {
            "name": "Desktop Application",
            "classType" : "B"
        },
        "tablet": {
            "name": "Tablet Application",
            "classType" : "A"
        }
   }

}

接下来,有多个组件使用此数据。我不想提供整个JSON,而是希望提供易于使用的这些组件Java对象。所以,我使用jsonschema2pojo tool从这个JSON创建JAVA对象。

现在,问题在于,当我使用这个库时,它会为移动设备,桌面设备和平板电脑创建三个不同的Java文件(这样做是正确的),但使用此信息的组件需要通用类而不是处理不同的移动桌面和平板电脑。此外,由于可以添加更多设备,并且只有很多组件,我不想保留特定的类。我希望3P提供了一个通用的“设备”,它具有可以存储移动/台式机或平板电脑信息的现场设备类型,但这将花费大量时间。同时,您能想到任何解决方案吗?

1 个答案:

答案 0 :(得分:0)

创建JSON模式而不是JSON来生成类,并使用'javaType'生成泛型类。

检查与上述JSON对应的架构:

{
    "type":"object",
    "properties": {
        "Information": {
            "type": "object",
            "properties": {
               "mobile": {
                   "type": "object",
                   "javaType":"Devices",
                   "properties": {
                       "name" : {
                           "type": "string"
                       },
                       "classType" : {
                           "type": "string"
                       }
                   }
                },
                "tablet": {
                   "type": "object",
                   "javaType":"Devices",
                   "properties": {
                       "name" : {
                           "type": "string"
                       },
                       "classType" : {
                           "type": "string"
                       }
                   }
                },
                "desktop": {
                   "type": "object",
                   "javaType":"Devices",
                   "properties": {
                       "name" : {
                           "type": "string"
                       },
                       "classType" : {
                           "type": "string"
                       }
                   }
                }

            }
       }      
    }
}