这篇文章有提到自定义GsonConvert来统一解析外层包裹的HttpResult关于自定义Code的统一处理,让业务只关心业务实体。
但是这个封装的还不够彻底,业务调用以及Retrofit的定义中还是透明的知道HttpResult的存在。业务调用和Retrofit的API定义应该只关心具体的业务Entity。HttpResult应该是在Gson解析的过程中自动处理,业务处不需要关心和知道它的存在。
那么问题来了,怎么给Entity包裹上HttpResult,变成HttpResult勒。通过断点查看,发现HttpResult的结构在GsonConvert的responseBodyConverter方法中的type 的实际类型是ParameterizedTypeImpl类型的,如下:
image.png
然后全局搜索ParameterizedTypeImpl 发现
image.png
于是拷贝retrofit2中的Utils类,简单的走读了一下源码,尽管没太看懂,然后尝试调用api,最后成功的根据Entity和HttpResult,构造出了HttpResult的ParameterizedTypeImpl对象
//给Entity 包裹到HttpResult 的泛型里,成为HttpResult
Utils.ParameterizedTypeImpl parameterizedType =