使用AndroidAnnotations @Rest和Kotlin定义模型的最佳方法?

问题描述 投票:0回答:1

我对Android和Kotlin完全陌生,我一直在研究Android注释。我设法使用以下代码解码了JSON响应:

class ExampleModel {
    @JvmField
    final var id: Int = 0

    lateinit var title: String

    var description: String? = null

    var author: Author? = null

}

@Rest(
    rootUrl = "...",
    converters = [MappingJackson2HttpMessageConverter::class]
)

interface ExampleClient {

    @Get("/promotions")
    fun getModels(): List<ExampleModel>

}

现在可以使用,但是我想问几个问题。

  1. 是否可以使用数据类?我尝试了一下,但是从MappingJackson2HttpMessageConverter不断收到错误消息,说没有可用的构造函数。
  2. 是否可以以某种方式忽略JSON中可能出现的额外键?假设我现在对作者数据不感兴趣,有没有一种方法可以删除声明,而不会因“意外密钥”而使解码失败?

考虑到我通常与Swift合作,所以如果您能指出Kotlin中的“ Codable”,我将不胜感激。

欢呼声

kotlin android-annotations
1个回答
0
投票

Kotlin数据类没有默认构造函数,而这通常是json反序列化库所必需的。任何数据类都至少需要一个构造函数参数,但是您可以解决它。定义默认值,可以使用null。例如:

data class Pojo(val name: String? = null, val age: Int? = null)

这样的代码将允许使用Pojo()构造函数。它应该可以工作,但是最好使用Kotlin原生的json解串器或使用AutoValue生成数据类。

您在这里使用的杰克逊允许使用@JsonIgnoreProperties忽略字段。

[如果您正在学习Android,则不必从Android注释开始。这不是很流行或现代的解决方案。当时,我在几个项目中都使用过它,这些项目很难维护或难以引进新的开发人员。查看android体系结构组件和jetpack-Google进行了一些不错的代码实验室。同样对于JSON选择Moshi或Gson。

© www.soinside.com 2019 - 2024. All rights reserved.