Firestore 文档 object (documentSnapshot) 到带有嵌套映射的 POJO
Firestore document object (documentSnapshot) to POJO with nested maps
我尝试序列化的我的 firestore 文档包含一个字符串映射图,如下所示:
我的一些示例文档collection:
id: "someId1" (String)
vouchers (Map)
voucher_with_some_random_id_1 (Map)
name: "name 1"
description: "description 1"
voucher_with_some_random_id_2 (Map)
name: "name 2"
description: "description 2"
我在创建匹配的 POJO class 时遇到的问题是内部映射的字段名称不是恒定的,因为我的 vouchers Map
中的凭证数量会不时变化。
对于自定义 ID 未知的 documents
,有一个 (注释 @DocumentId
)
但我找不到适用于地图的注释。
我最近一次失败的尝试:
public class MyPOJO {
public MyPOJO() {
}
public String id;
public VouchersPOJO vouchers;
}
public class VouchersPOJO {
public VouchersPOJO() {
}
public List<ActualVoucherPOJO> vouchers;
}
public class ActualVoucherPOJO {
public ActualVoucherPOJO() {
}
public String name, description;
}
MyPOJO x = documentSnapshot.toObject(MyPOJO.class);
在这种情况下,我认为 toObject()
不会对整个数据结构起作用。它不适用于处理 dynamic/variable 数据。相反,您必须手动:
- 迭代从快照返回的 Map of Maps 的条目
- 将每个地图转换为单独的对象
- Assemble 使用您在地图中找到的内容的最终 MyPOJO 对象
正如您已经说过的 voucher
是 Map
,所以这也是您应该在 Java class 中使用的内容:
public class MyPOJO {
public String id;
public Map<String,Voucher> vouchers;
}
public class Voucher {
public String name, description;
}
我尝试序列化的我的 firestore 文档包含一个字符串映射图,如下所示:
我的一些示例文档collection:
id: "someId1" (String)
vouchers (Map)
voucher_with_some_random_id_1 (Map)
name: "name 1"
description: "description 1"
voucher_with_some_random_id_2 (Map)
name: "name 2"
description: "description 2"
我在创建匹配的 POJO class 时遇到的问题是内部映射的字段名称不是恒定的,因为我的 vouchers Map
中的凭证数量会不时变化。
对于自定义 ID 未知的 documents
,有一个 @DocumentId
)
但我找不到适用于地图的注释。
我最近一次失败的尝试:
public class MyPOJO {
public MyPOJO() {
}
public String id;
public VouchersPOJO vouchers;
}
public class VouchersPOJO {
public VouchersPOJO() {
}
public List<ActualVoucherPOJO> vouchers;
}
public class ActualVoucherPOJO {
public ActualVoucherPOJO() {
}
public String name, description;
}
MyPOJO x = documentSnapshot.toObject(MyPOJO.class);
在这种情况下,我认为 toObject()
不会对整个数据结构起作用。它不适用于处理 dynamic/variable 数据。相反,您必须手动:
- 迭代从快照返回的 Map of Maps 的条目
- 将每个地图转换为单独的对象
- Assemble 使用您在地图中找到的内容的最终 MyPOJO 对象
正如您已经说过的 voucher
是 Map
,所以这也是您应该在 Java class 中使用的内容:
public class MyPOJO {
public String id;
public Map<String,Voucher> vouchers;
}
public class Voucher {
public String name, description;
}