【问题标题】:Moshi generic adapter for all retrofit calls适用于所有改装调用的 Moshi 通用适配器
【发布时间】:2021-12-21 15:12:12
【问题描述】:

是否可以为所有 retorfit 调用提供“通用”适配器,例如我的响应总是嵌套在数据字段示例中:

{
    "data": [
        {
            "name": "Hey",
            "last_name": "Test"
        },
        {
            "name": "Hey",
            "last_name": "Test"
        }
    ]
}

所以目前只有一个电话,我有 Moshi 适配器如下:

@Retention(AnnotationRetention.RUNTIME)
@JsonQualifier
annotation class WrappedPersonsList

@JsonClass(generateAdapter = true)
data class PersonList(var data: List<PersonDto>)

class CustomJsonAdapter {
    @WrappedPersonsList
    @FromJson
    fun fromJson(json: PersonList): List<PersonDto> {
        return json.data
    }

    @ToJson
    fun toJson(@WrappedPersonsList value: List<PersonDto>): PersonList {
        throw UnsupportedOperationException()
    }
}

因此,如果我添加另一个具有相同嵌套级别“数据”但不同字段的调用,我将再次必须创建具有新类型的适配器?或者是否可以使其通用,所以我总是直接跳到数据字段?

【问题讨论】:

    标签: android kotlin moshi


    【解决方案1】:

    假设您有两种类型的数据 Person 像现在这样的数据和 "Cat" 数据对于另一种。

    问题是,如果您无法区分 Person 数据和 Cat 数据,那么您的适配器也无法区分,但如果您已经可以从内部数据字段(例如“last_name”)中分辨出它是什么 然后你可以使用它来创建一个Map 并从那里反序列化它。 https://newbedev.com/how-to-deserialize-generic-types-with-moshi

    如果您有权访问 API 调用,则可以将 data 更改为 person_data,当猫出现时,您可以使用 cat_data(这可能会为您省去一些未来的麻烦)然后您可以很容易地分辨出PersonCat 之间的区别。

    【讨论】:

      猜你喜欢
      • 2018-02-21
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 2021-07-09
      • 2018-06-02
      • 2022-07-28
      • 1970-01-01
      相关资源
      最近更新 更多