Firestore中如何忽略/排除模型字段?Kotlin实现遇阻
解决Firestore中Kotlin类@Exclude注解不生效的问题
在Kotlin中使用Firestore时,直接给字段加@Exclude注解无法生效的核心原因是:Firestore基于JavaBean规范识别序列化字段,它会扫描类的getter方法,而Kotlin默认的@Exclude注解是作用在字段本身,而非自动生成的getter方法上。
解决方案
将@Exclude注解通过@get:指定器,明确应用到属性的getter方法上:
@IgnoreExtraProperties class UserModel : Serializable { // 其他属性和逻辑 @get:Exclude var isUserAuthenticated = false @get:Exclude var isNewUser = false }
原理说明
Kotlin声明var类型的属性时,会自动生成对应的getIsUserAuthenticated()(针对布尔类型属性)或getXXX()方法。Firestore在序列化对象时,会通过这些getter方法判断哪些字段需要存入数据库。默认的@Exclude注解只标记了字段,Firestore无法识别到getter上的排除规则,因此需要用@get:指定注解目标为getter方法,让Firestore正确忽略这些字段。
验证修改
修改模型类后,再执行你的数据写入代码:
val profile = UserModel( firebaseUser.uid, profileName, firebaseUser.email, profileImage, currentLanguage, profileLanguages, 0, 100 ) val uidRef = usersRef.document(firebaseUser.uid) uidRef.get().addOnCompleteListener { uidTask -> if (uidTask.isSuccessful) { val document = uidTask.result if (!document.exists()) { uidRef.set(profile) .addOnCompleteListener { profileCreationTask -> // 后续逻辑 } } } }
此时isUserAuthenticated和isNewUser字段就不会被写入Firestore数据库了。
内容的提问来源于stack exchange,提问作者Mickaël Brás Dias
相关产品推荐
相关产品推荐

