我正在使用改造开发 API 包装器,但在创建返回的对象类时遇到问题,因为来自同一端点的某些项目可能包含不同类型的字段。
例如,对于基本项,返回的 JSON 可能如下所示:
{
"name": "Box of Honed Splint Armor",
"description": "Double-click to unpack a full set of level 50 armor.",
"type": "Container",
"level": 0,
"rarity": "Masterwork",
"vendor_value": 86,
"game_types": [
"Wvw",
"Dungeon",
"Pve"
],
"flags": [],
"restrictions": [],
"id": 9000,
"chat_link": "[&AgEoIwAA]",
"icon": "https://render.guildwars2.com/file/72D04673660ECB7FD904680D487030A41106F952/63218.png",
"details": {
"type": "Default"
}
}
或者像这样获得更详细的项目:
{
"name": "Strong Soft Wood Longbow of Fire",
"description": "",
"type": "Weapon",
"level": 44,
"rarity": "Masterwork",
"vendor_value": 120,
"default_skin": "3942",
"game_types": [ "Activity", "Dungeon", "Pve", "Wvw" ],
"flags": [ "SoulBindOnUse" ],
"restrictions": [],
"id": 28445,
"chat_link":"[&AgEdbwAA]",
"icon": "https://render.guildwars2.com/file/C6110F52DF5AFE0F00A56F9E143E9732176DDDE9/65015.png",
"details": {
"type": "LongBow",
"damage_type": "Physical",
"min_power": 385,
"max_power": 452,
"defense": 0,
"infusion_slots": [],
"infix_upgrade": {
"attributes": [
{ "attribute": "Power", "modifier": 62 },
{ "attribute": "Precision", "modifier": 44 }
]
},
"suffix_item_id": 24547,
"secondary_suffix_item_id": ""
}
}
不同项目类型之间的详细信息字段可能有很大差异,我希望有一种简单的方法来访问与每种类型相对应的字段,而包装器使用者不必将类型转换为空的特定于类型的子类像其他包装器需要的基类,例如 one of the best wrappers做。
是否有某种方法可以根据父项的类型或类似的类型隐藏字段,以便我可以在项目类中包含所有可能的字段?
有什么建议吗?
最佳答案
根据 https://www.baeldung.com/retrofit
Retrofit 的工作原理是通过基本 URL 进行建模并使接口(interface)从 REST 端点返回实体。
为了简单起见,我们将通过对 User 类进行建模来获取 JSON 的一小部分,该类将在收到值时获取这些值:
public class User {
private String login;
private long id;
private String url;
// ...
// standard getters an setters
}
我们可以看到,在此示例中我们仅采用了属性的子集。 Retrofit 不会提示缺少属性 - 因为它只映射我们需要的内容,所以如果我们添加 JSON 中没有的属性,它甚至不会提示。
关于java - 改造 - Json 响应可以根据类型包含不同的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59655561/