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

sai*_*der 13 java android 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):at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:213)

查看依赖关系树,我得知Firebase正在使用Jackson mapper 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功能,但我不认为这是一个可行的选择,因为我将改变市长版本.

min*_*ser 37

对于已经转移到Google正式版Firebase的用户(截至2016年5月29日),您可以使用@Exclude而不是@JsonIgnore或@JsonProperty.是他们的文件的链接.

例:

public class dataPacket{
    public String data;
    ...
    @Exclude
    public String getData(){return data;}
}
Run Code Online (Sandbox Code Playgroud)


Dim*_*ira 22

更新:

正如其他人所指出的,注释@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
Run Code Online (Sandbox Code Playgroud)

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

老答案:

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

public transient String data;
Run Code Online (Sandbox Code Playgroud)


Cha*_*ham 14

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

@JsonIgnore

编辑:

Firebase改变了一切.活泉.现在改用它:

@排除


sai*_*der 7

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

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