在 Android Studio 项目中集成 MoShi 和 Retrofit 2 的最佳方式

Best way to integrate MoShi and Retrofit 2 in an Android Studio project

我想知道在我的 Android Studio 项目中将 Retrofit 与 MoShi 集成的最佳方式是什么。

首先我用的是retrofit的moshi转换器:

implementation 'com.squareup.retrofit2:converter-moshi:2.9.0'

我使用流行的插件“Json to Kotlin class”来生成我的 POJO: https://plugins.jetbrains.com/plugin/9960-json-to-kotlin-class-jsontokotlinclass-

当我创建一个新的 POJO 时,我使用了注释“MoShi (Reflect)”:

它为我生成了一个包含如下字段的 Pojo :

@Json(name = "image_url")
val imageUrl: String?

问题是 Retrofit2 似乎不喜欢我的字段名称中的下划线,因为我得到带有下划线名称的空结果。

Github issues 中搜索,我找到了解决方案。如果我使用此注释,它会起作用:

@field:Json(name = "image_url")
val imageUrl: String?

所以我的问题是:

  1. 使用 @field:Json 注解是将 MoShi 与 Retrofit 结合使用的最佳方式?
  2. 如果是,如何使用此注释轻松生成 Kotlin class(使用相同的插件或其他插件)?

从 Moshi 文档的这一部分可以明显看出:“没有字段命名策略、版本控制、实例创建者或长序列化策略。不是命名字段 visibleCards 并使用策略 class 将其转换为visible_cards,Moshi 希望您将字段命名为 visible_cards,因为它出现在 JSON。"

您的首选方式是不使用注释,而是使用与 JSON 中相同的方式命名字段。使用 Kotlin,您可以使用反引号表示否则无效的名称,例如 val `image-url`: String?

当然,您不希望在代码的其他部分使用这样的名称,为此您应该有单独的对象来描述后端出现的数据,另一个对象用于它应该如何出现在您的应用程序中。我们称这些为 DTO(数据传输对象)。