Список moshi, допускающий значение NULL, не соответствует требуемому значению

Следующие работы:

package com.squareup.moshi.problem

import com.squareup.moshi.JsonClass
import com.squareup.moshi.Moshi

@JsonClass(generateAdapter = true)
data class Foo(
        val bar: String?
)

fun main() {
    val adapter=Moshi.Builder().build().adapter<Foo>(Foo::class.java)
    adapter.fromJson("{}")
}

но при использовании списка он не работает:

package com.squareup.moshi.problem

import com.squareup.moshi.JsonClass
import com.squareup.moshi.Moshi

@JsonClass(generateAdapter = true)
data class Foo(
        val bar: List<String>?
)

fun main() {
    val adapter=Moshi.Builder().build().adapter<Foo>(Foo::class.java)
    adapter.fromJson("{}")
}

с участием:

Exception in thread "main" com.squareup.moshi.JsonDataException: Required value 'bar' missing at $
        at com.squareup.moshi.internal.Util.missingProperty(Util.java:605)
        at com.squareup.moshi.problem.FooJsonAdapter.fromJson(FooJsonAdapter.kt:44)
        at com.squareup.moshi.problem.FooJsonAdapter.fromJson(FooJsonAdapter.kt:16)
        at com.squareup.moshi.internal.NullSafeJsonAdapter.fromJson(NullSafeJsonAdapter.java:40)
        at com.squareup.moshi.JsonAdapter.fromJson(JsonAdapter.java:43)
        at com.squareup.moshi.problem.MoshiProblemKt.main(MoshiProblem.kt:13)
        at com.squareup.moshi.problem.MoshiProblemKt.main(MoshiProblem.kt)

Как я могу заставить его работать со списком? Вот репо, показывающее проблему: https://github.com/ligi/moshi_problem


person ligi    schedule 12.11.2019    source источник


Ответы (2)


На самом деле проблема заключалась в этой ошибке в moshi:

https://github.com/square/moshi/issues/990

Подсказка @cketti за то, что указала мне на проблему.

person ligi    schedule 13.11.2019

Если значение bar json равно нулю, значит, должно быть так

json

{
"bar": null
}

так и должно быть

adapter.fromJson("{"bar":null}")
person sasikumar    schedule 12.11.2019
comment
спасибо - но это а) вызывает ту же ошибку и б) это не то, что я хочу - я хочу иметь возможность опускать поле в json - person ligi; 13.11.2019