21

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

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

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

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

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

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

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

4

4 回答 4

47

对于迁移到 Google 正式版 Firebase(截至 2016 年 5 月 29 日)的用户,您可以使用@Exclude代替 @JsonIgnore 或 @JsonProperty。是他们文档的链接。

例子:

public class dataPacket{
    public String data;
    ...
    @Exclude
    public String getData(){return data;}
}
于 2016-05-29T14:30:52.897 回答
34

更新:

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

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

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

老答案:

如果我使用了 transient 关键字,我将从 GSON 来到 Firebase。这也适用于 Firebase

public transient String data;
于 2016-06-26T10:27:39.913 回答
15

正如接受的答案所述,Firebase 现在使用 Jackson,因此您可以注释您希望忽略的所需方法

@JsonIgnore

编辑:

Firebase 改变了一切。呜呜。现在改用这个:

@排除

于 2014-12-29T02:29:39.073 回答
8

Firebase 1.0.3 已经发布,现在使用 Jackson 2.2.2,所以注释@JsonIgnore是要走的路。

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

于 2013-09-02T20:26:17.263 回答