Moshi PolymorphicJsonAdapterFactory
Moshi PolymorphicJsonAdapterFactory
我正在为一个 Android 应用程序使用 Moshi,但是当负载因任何原因发生变化时,例如:后端添加一个新的对象类型,应用程序将崩溃,因为我需要告诉 Moshi 获取这个新的对象类型。
return Moshi.Builder()
.add(Adapter1())
.add(PolymorphicJsonAdapterFactory
.of(BaseClass::class.java, "baseclass")
.withSubtype(EntityOne::class.java, "entityone")
.withSubtype(EntityTwo::class.java, "entitytwo")
)
.build()
一切正常,但如果新实体进入有效负载,应用将不会显示任何数据。
示例:添加了一个“entitythree”,为了避免应用停止显示信息,我需要来添加
.withSubtype(EntityThree::class.java, "entitythree")
如果负载添加新实体,没有任何反应并且应用程序将继续正常运行,我该如何避免这种行为?
提前致谢
有一个 class 表示未知实体:
data class UnknownEntity : BaseClass {
val baseclass: String = "unknown"
}
然后,添加到你的工厂:
PolymorphicJsonAdapterFactory
.of(BaseClass::class.java, "baseclass")
.withSubtype(EntityOne::class.java, "entityone")
.withSubtype(EntityTwo::class.java, "entitytwo")
.withDefaultValue(UnknownEntity())
然后在您处理获取的实体的其余逻辑中,只需忽略 UnknownEntity
实例,应用程序应该像以前一样工作。
我正在为一个 Android 应用程序使用 Moshi,但是当负载因任何原因发生变化时,例如:后端添加一个新的对象类型,应用程序将崩溃,因为我需要告诉 Moshi 获取这个新的对象类型。
return Moshi.Builder()
.add(Adapter1())
.add(PolymorphicJsonAdapterFactory
.of(BaseClass::class.java, "baseclass")
.withSubtype(EntityOne::class.java, "entityone")
.withSubtype(EntityTwo::class.java, "entitytwo")
)
.build()
一切正常,但如果新实体进入有效负载,应用将不会显示任何数据。
示例:添加了一个“entitythree”,为了避免应用停止显示信息,我需要来添加
.withSubtype(EntityThree::class.java, "entitythree")
如果负载添加新实体,没有任何反应并且应用程序将继续正常运行,我该如何避免这种行为?
提前致谢
有一个 class 表示未知实体:
data class UnknownEntity : BaseClass {
val baseclass: String = "unknown"
}
然后,添加到你的工厂:
PolymorphicJsonAdapterFactory
.of(BaseClass::class.java, "baseclass")
.withSubtype(EntityOne::class.java, "entityone")
.withSubtype(EntityTwo::class.java, "entitytwo")
.withDefaultValue(UnknownEntity())
然后在您处理获取的实体的其余逻辑中,只需忽略 UnknownEntity
实例,应用程序应该像以前一样工作。