Firestore排除数据序列化

Zhy*_*ano 13 android firebase google-cloud-firestore

我有几个不应该转移到Firestore的属性,例如元数据("id"或"parent"),并且使用Firebase Realtime数据库,可以选择将它们设置为protected并使getter使它们可访问对外界而不是序列化到Firebase.

使用Firestore,阻止属性序列化的唯一选择是创建一个具有私有属性的类并对其进行扩展.但这并不是很有用,因为该属性甚至无法从类内部访问.

你能帮我找到一个解决方案来创建没有序列化到Firestore的类属性吗?(也许是注释?)

任何帮助是极大的赞赏!

Gri*_*orr 26

要将字段标记为从Firestore或Realtime数据库中排除,您可以使用@Exclude注释.例如:

@IgnoreExtraProperties
public class Model {
    @Exclude private String id;

    // ...
}
Run Code Online (Sandbox Code Playgroud)

您还可以@IgnoreExtraProperties对该类使用注释来自动忽略不映射到类字段的属性.

  • 这对我不起作用。显然,如果变量是“private”,则注释对其不起作用。在这种情况下,请在“public” getter 方法上添加“@Exclude”。 (6认同)
  • 哇,知道有注释的方法,但遗憾的是没有在任何地方记录! (3认同)
  • 请注意,@Exclude 注释来自 Firestore 或 RTDB 的不同包。'@com.google.firebase.firestore.Exclude' 分别为 '@com.google.firebase.database.Exclude' (2认同)
  • 对于 Firestore 使用 com.google.cloud.firestore.annotation.Exclude import 它对我有用。 (2认同)

lio*_*t98 9

对于Kotlin,您需要确保getter使用@Exclude注释而不是适当的字段对进行注释。您可以通过指定注释的目标来实现。例如:

data class Model(@get:Exclude val id: String)
Run Code Online (Sandbox Code Playgroud)

@get指定@Exclude应将注释添加到值的getter。有关更多信息,请参见注释使用场所目标文档。

这也适用于数据类。

感谢@ mfulton26的回答/sf/answers/2808211101/


Ugu*_*rim 6

格里姆索尔的答案对我不起作用。因此,我@Exclude在要排除写入Firestore db的字段的getter方法之前添加了注释,并且可以正常工作:

@Exclude
public String getId() {
    return id;
}
Run Code Online (Sandbox Code Playgroud)