kotlin - 在 Kotlin/Ktor 中可序列化的自定义多部分表单数据
问题描述
有谁知道如何编写convertForReceive
自定义Multipart.FormData
转换器的覆盖功能?
我想使用转换器将多部分请求转换为我的类,但我不知道它是如何工作的。
我有:
应用程序.kt
install(ContentNegotiation) {
json()
register(ContentType.MultiPart.FormData, CustomMultipartConverter)
}
自定义多部分转换器
object CustomMultipartConverter: ContentConverter {
override suspend fun convertForReceive(context: PipelineContext<ApplicationReceiveRequest, ApplicationCall>): Any? {
TODO("Not yet implemented")
}
override suspend fun convertForSend(
context: PipelineContext<Any, ApplicationCall>,
contentType: ContentType,
value: Any
): Any? {
TODO("Not yet implemented")
}
}
请求课程
class CreatePostRequest(
val text: String,
val image: File? = null
)
路线
route("v1/posts") {
authenticate {
route("create") {
val authJWT = call.authentication.principal as JWTAtuh
val request = call.receive<CreatePostRequest>()
//myCode
call.respond(HttpStatusCode.OK)
}
}
}
解决方案
你可以SerializationConverter
作为参考:
override suspend fun convertForReceive(context: PipelineContext<ApplicationReceiveRequest, ApplicationCall>): Any? {
val request = context.subject
val channel = request.value as? ByteReadChannel ?: return null
val charset = context.call.request.contentCharset() ?: defaultCharset
val serializer = format.serializersModule.serializer(request.typeInfo)
val contentPacket = channel.readRemaining()
return when (format) {
is StringFormat -> format.decodeFromString(serializer, contentPacket.readText(charset))
is BinaryFormat -> format.decodeFromByteArray(serializer, contentPacket.readBytes())
else -> {
contentPacket.discard()
error("Unsupported format $format")
}
}
}
推荐阅读
- reactjs - 容器滚动上的关闭菜单
- iis - 如何使用动态源 URL 重定向到此 URL?
- tsql - 是否可以使用 2 个执行 SQL 任务在 SSIS 中使用事务包装容器?
- c# - 将数据集(在 iframe 页面中)绑定到中继器(在父页面中)
- mysql - 如何使用 Diesel 生成和解析原始 SQL 查询?
- asp.net-core - 我不使用 Kestrel 作为 Web 服务器并在代码中启用 IIS 集成,但显示服务器是 Kestrel 的响应标头
- c# - 粘贴超过 32767 的 DataGridViewTextBoxColumn 文本
- javascript - 过滤香草 javascript 待办事项列表中的待办事项
- amazon-web-services - 如何使我的 AWS Lambda 函数能够写入 Firehose?
- python - python3:选择包属性中的功能和模块