【发布时间】:2017-01-12 01:05:58
【问题描述】:
我刚刚开始学习 Retrofit 2。我需要为现有的 Android 应用使用 RESTful API。本质上,Android 应用程序的数据模型已经存在。我有一个 REST 服务,它不直接转换为应用程序使用的模型类/属性(即在内部,类属性不符合 Retrofit 自动工作所需的命名类型)。
例如,给定一个Car 对象,API 可能会返回make、model 和color。应用程序的内部模型有一个现有的Vehicle 类,并且属性名称不直接映射。此外,某些属性必须按特定顺序初始化。
我知道这符合自定义转换器的条件,但你会建议我改为使用自定义 Gson 反序列化器吗?那会是一个更好/更容易的选择吗?
如果我刚刚开始阅读 Retrofit,任何指导都将不胜感激。我喜欢我不必编写所有样板代码的事实,但我觉得我无法充分利用它的潜力,因为我需要手动“映射”所有对象及其属性。
【问题讨论】:
-
我想看看 Jackson 转换器。 Jackson 提供了一系列注释,例如:
@JsonPropertyOrder- 排序属性,@JsonProperty("my_property")- json 属性到 POJO 映射和@JsonIgnoreProperties- 消除您不想使用的属性等等 - 我昨天才开始使用 Jackson,并已成功使用所有这些注释并按需要工作。自定义转换器只是取消了特定库的一些样板,无论是 Gson、Jackson 等。 -
@MarkKeen 谢谢!尽管您的意思是在接近尾声时描述自定义转换器的作用,而您对使用 Jackson 的建议仍然存在?谢谢你们,因为我现在看到了改造转换器和解串器之间的区别。我读过的所有教程都建议我使用 gson。所以也许我现在需要了解杰克逊,并用它来做我所有的映射/排序和预处理。
-
通过改造,您可以使用或不使用转换器 - 如果不使用,您仍然可以轻松地将 API 响应传递给 Gson/Jackson 等,改造通过转换器提供了便利。我已经将 Gson 转换器与 Retrofit2 一起使用,我也单独使用了 Gson。我已经开始使用 Jackson,并且已经更喜欢它了。我所看到的所有迹象都表明它明显更快(不确定 Gson 是否使用反射,老实说 Jackson 没有,但性能更好)。
-
@MarkKeen 看来我实际上可以直接使用 Jackson 来解析 Http 请求 - 还是我还需要使用 Retrofit?不管怎样,有什么好的教程可以指点我吗?杰克逊自己网站上的东西令人生畏和可怕:)
-
您可以使用 Jackson 直接进行转换 .. Retrofit 将其抽象出来,无论如何它都使用 okhttp,因此您可以将 okhttp 与 Jackson 单独结合使用..