我正在使用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功能,但我不认为这是一个可行的选择,因为我会改变它市长版。
答案 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
。