我使用的是ktor + kotlinx.serialization,我希望实现call.respond(Respond("some mesage",null))的json响应,如下所示:
result = null时的
{ "message" : "some mesage" }result is any Type时的
{
"message" : "some mesage",
"result" : "showing result"
}
or
{
"message" : "some mesage",
"result" : 0.0
}@kotlinx.serialization.Serializable
data class Respond<T>(
@SerialName("message")
val message : String? = null,
@SerialName("result")
val result : T? = null
)但它让我犯了这样的错误:
Serializer for class 'Respond' is not found.
Mark the class as @Serializable or provide the serializer explicitly.发布于 2022-09-23 04:36:43
我通过创建BaseResponse的继承,然后使用可空字符串覆盖结果类型的多态响应实现了:
@kotlinx.serialization.Serializable
sealed class BaseResponse<T> {
abstract val message: String?
abstract val result: T?
}
@kotlinx.serialization.Serializable
@SerialName("Response")
class Response(
@SerialName("message") override val message: String?, override val result: String? = null
) : BaseResponse<String>()
@kotlinx.serialization.Serializable
@SerialName("FullResponse")
class FullBaseResponse<T>(
@SerialName("message") override val message: String?, override val result: T
) : BaseResponse<T>()
val responseModule = SerializersModule {
polymorphic(BaseResponse::class) {
subclass(Response.serializer())
subclass(FullBaseResponse.serializer(PolymorphicSerializer(Any::class)))
}
}并添加了json配置:
install(ContentNegotiation) {
json(Json {
explicitNulls = false
serializersModule = responseModule
})
}所以当我只想显示消息时,我只使用call.respond(Respond("some message"))
https://stackoverflow.com/questions/73816802
复制相似问题