假设我有一个包含三个实现的Item接口(如果有帮助的话,也可以是一个抽象类)。
interface Item {
String getId();
// ...
}
class TextItem implement Item {
TextItem(String id, String text) {
// ...
}
// ...
}
class NumberItem implement Item {
NumberItem(String id, Integer number) {
// ...
}
// ...
}
class FlagItem implement Item {
FlagItem(String id, Boolean flag) {
// ...
}
// ...
}
是否可以设置 Jackson ,以便根据与给定项目类型相关的属性的存在创建适当实施的实例?
请参阅JSON示例,每个项目都有不同的第二个属性: text , number 或 flag 。这些属性中的每一个都在其中存储不同的数据类型。
如何在不更改JSON结构的情况下反序列化,理想情况下如果不编写基于if-else的自定义反序列化器呢?
{
"items": [
{
"id": "item-1",
"text": "some text"
},
{
"id": "item-2",
"number": 12345
},
{
"id": "item-3",,
"flag": true
}
]
}
为第二个项目属性选择的数据类型只是一个示例。它们也可以是一些自定义类型或集合。关键是如何设置Jackson,以便它通过构造函数参数类型或特定于给定项类型的属性名称的存在来使用适当的项目实现。