Moshi:应为 Class、ParameterizedType 或 GenericArrayType,但 <null> 的类型为 null
Moshi: Expected a Class, ParameterizedType, or GenericArrayType, but <null> is of type null
我有这个型号:
class Model1 {
<... other fields here ...>
var attributes: Map<String, Any>? = null
<... other fields here ...>
}
我希望得到这些模型的列表。
样本JSON:
[
{
"attributes": {
"title": "New Year's Day",
"country": "SG"
}
},
{
"attributes": {
"staff_id": 320011,
"title": "Labor day",
"date_joined": "2017-01-10 00:00:00",
"years": 1
}
}
]
然后我在反序列化过程中得到这个错误:
Caused by: java.lang.IllegalArgumentException: Expected a Class, ParameterizedType, or GenericArrayType, but <null> is of type null
at com.squareup.moshi.Types.getRawType(Types.java:165)
at com.squareup.moshi.ClassJsonAdapter.createFieldBindings(ClassJsonAdapter.java:82)
at com.squareup.moshi.ClassJsonAdapter.create(ClassJsonAdapter.java:74)
at com.squareup.moshi.Moshi.adapter(Moshi.java:99)
at com.squareup.moshi.Moshi.adapter(Moshi.java:57)
at com.squareup.moshi.MapJsonAdapter.<init>(MapJsonAdapter.java:46)
at com.squareup.moshi.MapJsonAdapter.create(MapJsonAdapter.java:37)
at com.squareup.moshi.Moshi.adapter(Moshi.java:99)
at com.squareup.moshi.ClassJsonAdapter.createFieldBindings(ClassJsonAdapter.java:90)
at com.squareup.moshi.ClassJsonAdapter.create(ClassJsonAdapter.java:74)
at com.squareup.moshi.Moshi.adapter(Moshi.java:99)
at com.squareup.moshi.Moshi.adapter(Moshi.java:57)
at com.squareup.moshi.CollectionJsonAdapter.newArrayListAdapter(CollectionJsonAdapter.java:51)
at com.squareup.moshi.CollectionJsonAdapter.create(CollectionJsonAdapter.java:35)
at com.squareup.moshi.Moshi.adapter(Moshi.java:99)
at com.squareup.moshi.ClassJsonAdapter.createFieldBindings(ClassJsonAdapter.java:90)
at com.squareup.moshi.ClassJsonAdapter.create(ClassJsonAdapter.java:74)
at com.squareup.moshi.Moshi.adapter(Moshi.java:99)
at retrofit2.converter.moshi.MoshiConverterFactory.responseBodyConverter(MoshiConverterFactory.java:91)
at retrofit2.Retrofit.nextResponseBodyConverter(Retrofit.java:330)
at retrofit2.Retrofit.responseBodyConverter(Retrofit.java:313)
at retrofit2.ServiceMethod$Builder.createResponseConverter(ServiceMethod.java:736)
... 65 more
我需要字段属性是一张地图。里面的数据可以是任意类型任意值
您需要 @JvmSuppressWildcards
地图参数。
https://github.com/square/moshi/issues/410#issuecomment-351131524
希望下一个版本的 Moshi 中能出现更好的错误消息。
只需要这样做:
class Model1 {
<... other fields here ...>
@JvmSuppressWildcards var attributes: Map<String, Any>? = null
<... other fields here ...>
}
https://github.com/square/moshi/issues/410#issuecomment-351131524
我有这个型号:
class Model1 {
<... other fields here ...>
var attributes: Map<String, Any>? = null
<... other fields here ...>
}
我希望得到这些模型的列表。
样本JSON:
[
{
"attributes": {
"title": "New Year's Day",
"country": "SG"
}
},
{
"attributes": {
"staff_id": 320011,
"title": "Labor day",
"date_joined": "2017-01-10 00:00:00",
"years": 1
}
}
]
然后我在反序列化过程中得到这个错误:
Caused by: java.lang.IllegalArgumentException: Expected a Class, ParameterizedType, or GenericArrayType, but <null> is of type null
at com.squareup.moshi.Types.getRawType(Types.java:165)
at com.squareup.moshi.ClassJsonAdapter.createFieldBindings(ClassJsonAdapter.java:82)
at com.squareup.moshi.ClassJsonAdapter.create(ClassJsonAdapter.java:74)
at com.squareup.moshi.Moshi.adapter(Moshi.java:99)
at com.squareup.moshi.Moshi.adapter(Moshi.java:57)
at com.squareup.moshi.MapJsonAdapter.<init>(MapJsonAdapter.java:46)
at com.squareup.moshi.MapJsonAdapter.create(MapJsonAdapter.java:37)
at com.squareup.moshi.Moshi.adapter(Moshi.java:99)
at com.squareup.moshi.ClassJsonAdapter.createFieldBindings(ClassJsonAdapter.java:90)
at com.squareup.moshi.ClassJsonAdapter.create(ClassJsonAdapter.java:74)
at com.squareup.moshi.Moshi.adapter(Moshi.java:99)
at com.squareup.moshi.Moshi.adapter(Moshi.java:57)
at com.squareup.moshi.CollectionJsonAdapter.newArrayListAdapter(CollectionJsonAdapter.java:51)
at com.squareup.moshi.CollectionJsonAdapter.create(CollectionJsonAdapter.java:35)
at com.squareup.moshi.Moshi.adapter(Moshi.java:99)
at com.squareup.moshi.ClassJsonAdapter.createFieldBindings(ClassJsonAdapter.java:90)
at com.squareup.moshi.ClassJsonAdapter.create(ClassJsonAdapter.java:74)
at com.squareup.moshi.Moshi.adapter(Moshi.java:99)
at retrofit2.converter.moshi.MoshiConverterFactory.responseBodyConverter(MoshiConverterFactory.java:91)
at retrofit2.Retrofit.nextResponseBodyConverter(Retrofit.java:330)
at retrofit2.Retrofit.responseBodyConverter(Retrofit.java:313)
at retrofit2.ServiceMethod$Builder.createResponseConverter(ServiceMethod.java:736)
... 65 more
我需要字段属性是一张地图。里面的数据可以是任意类型任意值
您需要 @JvmSuppressWildcards
地图参数。
https://github.com/square/moshi/issues/410#issuecomment-351131524
希望下一个版本的 Moshi 中能出现更好的错误消息。
只需要这样做:
class Model1 {
<... other fields here ...>
@JvmSuppressWildcards var attributes: Map<String, Any>? = null
<... other fields here ...>
}
https://github.com/square/moshi/issues/410#issuecomment-351131524