为何@PropertyName可序列化其他类型,却无法自动序列化Map字段?
问题原因及解决方案
你遇到的问题是Firestore对Map类型的POJO映射规则和普通简单类型不同,导致带@PropertyName注解的HashMap始终为null。
核心原因
Firestore对于String、Integer这类简单数据类型,即使只有Getter方法,也能通过反射直接访问私有字段完成数据注入;但Map作为复杂集合类型,必须满足要么有对应带注解的Setter方法,要么在Getter方法上标注正确的@PropertyName,否则无法完成数据映射。
可行解决方案
方案一:添加带注解的Setter方法
给testFieldHashMap添加Setter方法,并同步标注@PropertyName注解,让Firestore能正确注入数据:
public class ScreenModel { @PropertyName("TEST_FIELD") private HashMap<String, Object> testFieldHashMap; @PropertyName("TEST_FIELD") public HashMap<String, Object> getTestFieldHashMap() { return testFieldHashMap; } @PropertyName("TEST_FIELD") public void setTestFieldHashMap(HashMap<String, Object> testFieldHashMap) { this.testFieldHashMap = testFieldHashMap; } }
方案二:在Getter方法上标注注解
直接在Getter方法上添加@PropertyName注解(可以保留或移除字段上的注解),Firestore会优先识别Getter上的注解完成映射:
public class ScreenModel { private HashMap<String, Object> testFieldHashMap; @PropertyName("TEST_FIELD") public HashMap<String, Object> getTestFieldHashMap() { return testFieldHashMap; } }
内容的提问来源于stack exchange,提问作者Taha Sami
相关产品推荐
相关产品推荐

