12.27 使用Gson将json转为实体,如何泛型避免重复的封装实体

前言:在实际开发中,可能会调用第三方接口,现在大多数时候,都是返回的json格式的数据。如图

使用Gson将json转为实体,如何泛型避免重复的封装实体

json数据

但是我们在编码时,拿到要直接拿这个json字符串处理吗?显然是不可能的,那得多麻烦。由此也就出现了将json转为实体。实体就是对象。这样我们操作起来就方便多了。

在我转实体又碰见一个翻来覆去重复封装实体的问题,如图:

使用Gson将json转为实体,如何泛型避免重复的封装实体

广告主

使用Gson将json转为实体,如何泛型避免重复的封装实体

广告组

上面有些字段是固定的如(code、message),正常我们封装如下

使用Gson将json转为实体,如何泛型避免重复的封装实体

广告主

使用Gson将json转为实体,如何泛型避免重复的封装实体

广告组

其中AdvertiserReport和AdgroupReport就代表的我上图中的data。这么封装是可以的,没什么不妥的。

使用Gson将json转为实体,如何泛型避免重复的封装实体

gson转换

但我我个人认为这样太麻烦了,我完全可以将message、code这样的字段拿出去。这里可能有人会想到继承。但这是不可取的。为什么呢。因为data,当data为多种类型时,不还是要根据data创建相应的返回bean吗。再说的详细点(比如data分为广告主、广告组,那在对返回json封装时,是不是还得根据广告主创建一个bean、根据广告组创建一个bean,这样一样没解决问题,还多出了继承bean),这里我想到了泛型解决。

使用Gson将json转为实体,如何泛型避免重复的封装实体

泛型封装

这样当我想返回广告主时,我就把广告主的bean传递过来,想返回广告组,我就把广告组的bean传递过来。

使用Gson将json转为实体,如何泛型避免重复的封装实体

泛型返回封装

是不是就解决了我上面的问题,我只需要封装好data中的json就可以了,与data平齐的字段完全不需要关心,因为BasicsReponse中已经封装好了。这样是不是就减少了创建一层bean的问题,而起一旦与data平齐有字段变化,只需要修改BasicsReponse,如果按最开始的思路,就要AdvertiserReponse和AdReponse都要修改一遍。

总结:

  1. 封装API要注意一些不必要类的封装(如我上面提到的AdvertiserReponse,AdReponse,完全是多于的,只会增加你的代码量,而起后期维护也很麻烦)。
  2. 将一些相同的字段封装在一个类,其他继承就好了。
  3. 一定要注意不要因为一个改动就要修改整个项目代码的问题(如我上面提到的AdvertiserReponse,AdReponse,如果返回字段增加了一个ID,那就得挨个找reposne的类添加上这个字段)。


分享到:


相關文章: