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 数据。相反,您必须手动:

  1. 迭代从快照返回的 Map of Maps 的条目
  2. 将每个地图转换为单独的对象
  3. Assemble 使用您在地图中找到的内容的最终 MyPOJO 对象

正如您已经说过的 voucherMap,所以这也是您应该在 Java class 中使用的内容:

public class MyPOJO {

    public String id;
    public Map<String,Voucher> vouchers;

}

public class Voucher {

    public String name, description;

}