在不修改 JSON 数据的情况下创建通用 Java 类
Create generic Java classes without modifying JSON data
我有一个非常独特的用例,我有一些 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 文件(这样做是正确的)但是使用这些信息的组件需要一个通用的 class 而不是对移动桌面和平板电脑进行不同的处理。此外,由于可以添加更多设备并且只有很多组件,我不想保留具体的 classes。我希望 3P 提供一个通用的 'device',它具有可以存储 mobile/desktop 或平板电脑信息的字段 deviceType,但这会花费很多时间。同时,你能想到什么解决方案?
创建 JSON 模式而不是 JSON 来生成 classes 并使用 'javaType' 生成通用的 class.
检查上面对应的模式 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"
}
}
}
}
}
}
}
我有一个非常独特的用例,我有一些 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 文件(这样做是正确的)但是使用这些信息的组件需要一个通用的 class 而不是对移动桌面和平板电脑进行不同的处理。此外,由于可以添加更多设备并且只有很多组件,我不想保留具体的 classes。我希望 3P 提供一个通用的 'device',它具有可以存储 mobile/desktop 或平板电脑信息的字段 deviceType,但这会花费很多时间。同时,你能想到什么解决方案?
创建 JSON 模式而不是 JSON 来生成 classes 并使用 'javaType' 生成通用的 class.
检查上面对应的模式 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"
}
}
}
}
}
}
}