作为我的应用程序全局重构的一部分,我第一次尝试改造 2。
我的应用程序存储从传感器读取的不同国王的数据。每个度量都有共同的特征,所以我为我需要的每种数据创建了一个父 Measure 类(它不是抽象的)和一些子类。例如,我创建了一个 TemperatureMeasure 子类。
我可以访问一个我无法更改的公共 API,以发送我在我的应用程序中收集的度量值。
使用改造(2.0 beta),我用这个方法声明了一个接口:
@POST("/bdd/measure/send/{measureType}/{sensorId}")
Call<APIResponse> sendFludiaRaw(@Path("site") String siteId, @Path("measureType") String measureType, @Path("sensor") String sensorId, @Body List<? extends Measure> measures);
我的计划是能够通过提供扩展 Measure 类的对象列表来调用此方法。我使用 Gson 转换器作为序列化器。当我调用此方法时 - 例如使用 TemperatureMeasure 对象列表 - 创建的 JSON 对象仅包括 Measure 类的成员,但不包括 TemperatureMeasure 成员。
解决此问题的最佳解决方案是什么?
根据我一直在阅读的内容,一种选择是实现串行器/解串器并将其提供给 Gson 转换器。当遇到 Measure 对象时,该序列化程序会自动尝试序列化正确的子类。另一种选择是自己使用 Gson 处理序列化,并将原始 JSON 数据作为字符串提供给改造调用,但这会破坏使用改造的好处。我发现的最后一个选项是在我的改造界面中为每种度量创建一个请求。
是否有更好的通用友好选项可以阻止我在某处编写巨大的 switch 语句?
谢谢