如何使用 Firebase 1.0.2 忽略对象模型的新字段

2022-09-02 02:07:18

我正在使用Firebase依赖项的最后一个版本,即1.0.2,我在正确解析pojos时遇到问题。

问题是,在任何时候架构都可以更改,但我不希望我的应用程序崩溃:

D/AndroidRuntime(14097): 关闭 VM W/dalvikvm(14097): threadid=1: 线程退出,但未捕获异常 (group=0x40a451f8) E/AndroidRuntime(14097): FATAL EXCEPTION: main E/AndroidRuntime(14097): com.firebase.client.FirebaseException: Failed to vaulte to type E/AndroidRuntime(14097): at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:213)

查看依赖关系树,我发现Firebase使用的是Jackson mapper 1.9.7,因此注释不是一个选项。此外,对象映射器被包装到这个Firebase对象中,所以我无法配置属性(对于Jackson 1.9及更早版本)。@JsonIgnoreProperties(ignoreUnknown = true")DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIESDeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES

有没有办法将此属性设置为类级批注或配置映射器或任何其他机制?

最好的解决方案是Firebase 1.0.3开始使用Jackson 2.0,但不知道这是否是他们现在关心的事情。

注意:我已经考虑过排除可传递的Jackson 1.9.7依赖项并添加Jackson 2.0,以便我可以访问此忽略未知功能,但我不认为这是一个可行的选择,因为我将更改市长版本。


答案 1

对于那些已经迁移到Google官方版本的Firebase(截至2016年5月29日)的用户,您可以使用@Exclude而不是@JsonIgnore或@JsonProperty。这是他们文档的链接。

例:

public class dataPacket{
    public String data;
    ...
    @Exclude
    public String getData(){return data;}
}

答案 2

更新:

正如其他人所指出的,注释是现在使用它的正确方式。但是如果你使用Kotlin,那就行不通了。对于 Kotlin 使用@Exclude

    @Exclude @JvmField 
    var data: String? = nil
    //or
    @set:Exclude @get:Exclude 
    var data: String? = nil

因为注释只能应用于生成的字段,而不能应用于属性。

旧答案:

我从GSON来到Firebase,我使用了瞬态关键字。这也适用于Firebase。

public transient String data;

推荐