【问题标题】:How to ignore new fields for an object model with Firebase 1.0.2如何使用 Firebase 1.0.2 忽略对象模型的新字段
【发布时间】:2013-08-10 03:31:03
【问题描述】:

我正在使用 Firebase 依赖项的最新版本 at the moment,即 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 功能,但我认为这不是一个可行的选择,因为我将更改市长版。

【问题讨论】:

  • 我已经联系了 Firebase Android SDK 开发人员,似乎应该可以将 Jackson 更新到 2.0。请继续关注更新!
  • 好消息!感谢您的信息。

标签: java android firebase


【解决方案1】:

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

例子:

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

【讨论】:

    【解决方案2】:

    更新:

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

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

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

    旧答案:

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

    public transient String data;
    

    【讨论】:

      【解决方案3】:

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

      注释您希望忽略的所需方法

      @JsonIgnore

      编辑:

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

      @排除

      【讨论】:

      • 当我问这个问题时,Firebase 使用了不支持 @JsonIgnore 的 Jackson 的旧版本 (1.9.7)。检查接受的答案。
      【解决方案4】:

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

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

      【讨论】:

      • 如何使用不再使用 jackson 的新的新 firebase 9.0.0 来做到这一点?
      • 我前段时间编辑了答案。您现在需要@Exclude 或在您的领域使用transient
      猜你喜欢
      • 1970-01-01
      • 2019-12-31
      • 2011-07-24
      • 1970-01-01
      • 2014-07-10
      • 2022-11-23
      • 1970-01-01
      相关资源
      最近更新 更多