You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Firestore中@PropertyName注解字段映射失效问题排查

Firestore使用@PropertyName注解后POJO字段映射为空问题解决

尝试从Firebase Firestore获取数据时,因POJO字段名与Firestore字段名不一致,使用了@PropertyName("Email")等注解,但Firestore映射器未正确映射字段——日志显示已成功获取数据,但POJO的email和password字段为空。


相关代码

GmailCredentials.java

public class GmailCredentials {

   private String email;
   private String password;


   public GmailCredentials() {
   }

   @PropertyName("Email")
   public String getEmail() {
      return email;
   }
   @PropertyName("Password")
   public String getPassword() {
      return password;
   }
   @PropertyName("Email")
   public void setEmail(String email) {
      this.email = email;
   }
   @PropertyName("Password")
   public void setPassword(String password) {
      this.password = password;
   }
}

Kotlin读取数据代码

val taskFirebae = Firebase.firestore.collection("AppSettings").document("jt86iH0kJyNhOHftv7DF").get()

val result = Tasks.await(taskFirebae)
val gmailCredentials = result.toObject(GmailCredentials::class.java)

if (BuildConfig.DEBUG){
    Log.d(TAG," ${result.data?.toString()}")
    Log.d(TAG,"emil ${gmailCredentials?.email}")
    Log.d(TAG,"password ${gmailCredentials?.password}")
}

问题原因及解决方案

核心原因

Firestore的字段映射是大小写敏感的,且注解标注位置不当、字段名不匹配等情况会导致映射失败。

修复方案

  1. 调整注解标注位置(推荐)
    将@PropertyName直接标注在类的字段上,无需在getter/setter上重复添加,映射逻辑更清晰,避免方法注解带来的匹配问题:
public class GmailCredentials {

   @PropertyName("Email")
   private String email;
   @PropertyName("Password")
   private String password;

   public GmailCredentials() {
   }

   public String getEmail() {
      return email;
   }

   public String getPassword() {
      return password;
   }

   public void setEmail(String email) {
      this.email = email;
   }

   public void setPassword(String password) {
      this.password = password;
   }
}
  1. 验证字段名匹配
    检查Firestore文档中的字段名是否与@PropertyName的参数完全一致(比如确认是Email而非email,Password而非password),日志中result.data?.toString()的输出可直接验证这一点。

  2. 更新Firestore SDK
    确保使用的Firestore SDK为最新稳定版,旧版本可能存在注解映射的兼容性bug。

  3. 调整字段访问权限(可选)
    若上述方案无效,可尝试将POJO的字段改为public修饰符,确保Firestore的反射机制能正常访问字段内容。


内容的提问来源于stack exchange,提问作者Hamza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:01:00