Moshi 无法解析可为 nullable

Moshi cannot parse nullable

你好)希望你能帮助我。 使用 kotlin (Retrofit2 + moshi) 我从“https://api.spacexdata.com/v3/launches”获取数据并解析它。 一切正常(我得到的属性如:flight_number、mission_name),但有些属性为“空”,如“mission_patch”——有 111 个对象。其中 109 个在“mission_patch”处有数据,2 个对象没有(“mission_patch”:null)。 我的问题:moshi 无法正确解析包含 null 的属性。

如果我使用:

data class SpaceXProperty(
   val  flight_number: Int,
   val mission_name: String,
   val mission_patch: String)

我收到错误:“失败:$[1] 处缺少所需值“mission_patch”- 好的,我将数据 class 更改为下一个:

data class SpaceXProperty(
       val  flight_number: Int,
       val mission_name: String,
       val mission_patch: String?)

有了这个我得到了数据,但是每个对象都有 mission_patch=null。这是不正确的,因为只有 2 个对象 mission_patch=null,不是全部。

请帮帮我。我是 kotlin 的新手,我做错了什么?

我的改装服务:

private const val BASE_URL = "https://api.spacexdata.com/v3/"


private val moshi = Moshi.Builder()
    .add(KotlinJsonAdapterFactory())
    .build()

private val retrofit = Retrofit.Builder()
    .addConverterFactory(MoshiConverterFactory.create(moshi))
    //.addConverterFactory(ScalarsConverterFactory.create())
    .baseUrl(BASE_URL)
    .build()

 interface SpaceXApiService {
    @GET("launches")
    suspend fun getProperties():List<SpaceXProperty>
}

 object SpaceXApi{
    val retrofitservice :SpaceXApiService by lazy {
    retrofit.create(SpaceXApiService::class.java)
    }
}

mission_patch 不像 flight_number 等在根对象中。它嵌套在 links 中。所以你的模型应该匹配。试试这个:

data class SpaceXProperty(
       val  flight_number: Int,
       val mission_name: String,
       val links: Links) {

    data class Links(val mission_patch: String?)
}