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

时间:2013-08-08 12:11:05

标签: java android firebase

我正在使用Firebase依赖项的最后一个版本at the moment,这是1.0.2,我在解析我的pojos时遇到了问题。

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

  

D / AndroidRuntime(14097):关闭VM W / dalvikvm(14097):   threadid = 1:线程退出,未捕获异常(group = 0x40a451f8)   E / AndroidRuntime(14097):致命异常:主要   E / AndroidRuntime(14097):com.firebase.client.FirebaseException:失败   反弹到E / AndroidRuntime类型(14097):at   com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:213)

查看依赖关系树,我得知Firebase正在使用Jackson mapper 1.9.7,因此注释@JsonIgnoreProperties(ignoreUnknown = true")不是一个选项。此外,对象映射器包含在此Firebase对象中,因此我无法为Jackson 1.9及之前的版本配置DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES属性(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES。)

有没有办法设置此属性,无论是作为类级别注释还是配置映射器或任何其他机制?

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

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

4 个答案:

答案 0 :(得分:34)

对于已移至Google官方版Firebase的用户(截至2016年5月29日),您可以使用 @Exclude 代替@JsonIgnore或@JsonProperty。 Here是其文档的链接。

示例:

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

答案 1 :(得分:19)

<强>更新

正如其他人所指出的,注释@Exclude是现在使用它的正确方法。但是,如果你使用Kotlin不会工作。对于Kotlin使用

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

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

旧回答:

我是从GSON来到Firebase的,我使用的是transient关键字。这也适用于Firebase

public transient String data;

答案 2 :(得分:14)

正如接受的答案所述,Firebase现在使用Jackson,因此您可以使用

注释您想要忽略的所需方法
  

@JsonIgnore

编辑:

Firebase改变了一切。活泉。现在改为使用它:

  

@Exclude

答案 3 :(得分:4)

Firebase 1.0.3已发布,现在使用的是Jackson 2.2.2,因此注释@JsonIgnore即可。

编辑: 截至2017年,Firebase不再使用Jackson了。正确的注释是@Exclude