【问题标题】:Firestore document object (documentSnapshot) to POJO with nested mapsFirestore 文档对象 (documentSnapshot) 到带有嵌套映射的 POJO
【发布时间】:2020-05-09 21:36:34
【问题描述】:

我正在尝试序列化的 Firestore 文档包含这样的字符串映射图:

我的收藏中的一些示例文档:

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 类时遇到的问题是内部映射的字段名称不是恒定的,因为我的 vouchers Map 中的凭证数量不时变化。

对于具有未知自定义 ID 的 documents,有一个 solution(注解 @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);

【问题讨论】:

    标签: android serialization google-cloud-firestore pojo


    【解决方案1】:

    正如你已经说过的 voucherMap,所以这也是你应该在 Java 类中使用的:

    public class MyPOJO {
    
        public String id;
        public Map<String,Voucher> vouchers;
    
    }
    
    public class Voucher {
    
        public String name, description;
    
    }
    

    【讨论】:

      【解决方案2】:

      在这种情况下,我认为toObject() 不会对整个数据结构起作用。它不适用于处理动态/可变数据。相反,您必须手动:

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

      【讨论】:

        猜你喜欢
        • 2021-07-06
        • 2021-09-03
        • 2023-03-18
        • 1970-01-01
        • 2020-03-19
        • 1970-01-01
        • 2020-09-14
        • 2020-04-05
        • 2021-05-25
        相关资源
        最近更新 更多