如何使用Firebase 1.0.2忽略对象模型的新字段
我正在使用Firebase依赖关系的最新版本,这是1.0.2,我有问题得到正确解析我的pojos。
事情是,在任何时候架构可以改变,但我不希望我的应用程序崩溃与此:
D / AndroidRuntime(14097):关闭虚拟机W / dalvikvm(14097):threadid = 1:线程退出与未捕获的exception(组= 0x40a451f8)E / AndroidRuntime(14097):致命例外:主E / AndroidRuntime(14097):com .firebase.client.FirebaseException:无法popup键入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
为jackson1.9和之前)。
有什么办法设置这个属性,无论是作为一个类级别的注释或配置映射器或任何其他机制?
最好的解决方案是,Firebase 1.0.3开始使用Jackson 2.0,但不知道这是否是他们现在关心的事情。
注意:我已经考虑过排除传递的Jackson 1.9.7依赖,并添加Jackson 2.0,以便我可以访问这个ignoreUnknown特性,但是我不认为这是一个可行的选择,因为我会改变市长版本。
对于已转移到Google正式版Firebase(截至2016年5月29日)的用户,您可以使用@Exclude而不是@JsonIgnore或@JsonProperty。 这里是他们的文件的链接。
例:
public class dataPacket{ public String data; ... @Exclude public String getData(){return data;} }
正如接受的答案所述,Firebase现在使用Jackson,因此您可以注释您希望忽略的所需方法
@JsonIgnore
编辑:
Firebase改变了一切。 活泉。 现在用这个代替:
@排除
更新:
正如其他人指出的, @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是使用了瞬态关键字。 这也适用于Firebase
public transient String data;
Firebase 1.0.3发布了,现在使用的是Jackson 2.2.2,所以@JsonIgnore
的注释就是要走的路。
编辑:截至目前在2017年,Firebase不再使用jackson了。 正确的注释是@Exclude
。