Firebase的一些小坑

当你再也没有什么可以失去的时候,就是你开始得到的时候。


当前我们公司开发的应用用到了google的firebase。在使用中发现了一些坑,在此做一个记录

1号坑----Firebase字段重命名

日常开发server返回的字段名可能会修改,比如server_res字段改成serverRes。这种修改对客户端往往影响巨大,客户端为了将这种修改后的影响降低到最小,往往会使用SerializedName注解。比如下面的一段代码。

@Data
public class ServerRes {
    @SerializedName("big_icon")//server返回的字段是big_icon
    public String bigIcon;
}

我们使用了lombok注解避免重复的get/set方法,同时用SerializedName注解将server真正返回的big_icon字段重命名为bigIcon,这样带来的的好处是如果server在后续版本迭代中将big_icon重命名为big_ic,客户端只用修改成@SerializedName(“big_ic”)即可,其余的逻辑不用改动,保证了最小改动。

在使用firebase的过程中,我也尝试遵循上述原则,但发现每次解析firebase的字段都返回空。多次失败后才发现是我用SerializedName注解导致的,查询文档后发现firebase提供跟@SerializedName类似的@PropertyName(“xxx”)注解方法,但如果要配合lombok的@Data注解还是不工作。
具体原因在下面这个link里有说明:

https://stackoverflow.com/questions/45306168/firebase-serialization-names

如果要考虑到兼顾字段变更,那么可以如下修改:

public class ServerRes {
    @PropertyName("big_icon")
    public String bigIcon;

    @PropertyName("big_icon")
    public String getBigIcon() {
        return bigIcon;
    }
}

2号坑----Firebase配置Map类型的数据结构

Firebase也可以配置Map结构的数据,如下图:
在这里插入图片描述
我们想定一个key为1,value包含的big/small属性的对象。但最终出来的数据格式却如下图:
在这里插入图片描述
key为1直接不见了,反而多了一个null,Firebase将其按照数组来解析了,并不是我们想要的,这个问题折腾了我好久才找到原因。这个的解决办法是key不要定义成纯数字,比如我们定义key为“_1”:
在这里插入图片描述
就可以最终解析成了我们想要的
在这里插入图片描述
总体来讲firebase还是挺好用的,如果你的应用面向国外用户,推荐集成它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值