Невозможно отправить запрос с помощью клиента ktor в kotlin js
Я пытаюсь сделать HTTP-запрос, но он не работает по причинам, которые я не могу понять.
object KtorClient {
val client = HttpClient() {
install(JsonFeature) {
serializer = KotlinxSerializer()
}
}
}
suspend fun createOwner(url : String = "http://localhost:112/company/owner/register", ownerMapper: OwnerMapper) {
println(ownerMapper)
client.post<Unit>(url){
body = ownerMapper
}
}
BlockquoteIllegalStateException {message_8yp7un$_0: "Не удалось отправить тело. Тип содержимого: класс OwnerMapper, но ожидается OutgoingContent.", Cause_th0jdv$_0: null, stack: "captureStack↵Exception↵RuntimeException↵IllegalSta…↵↵↵↵↵↵↵↵↵↵↵↵↵↵↵↵↵promiseReactionJob@[собственный код]", name: "IllegalStateException"}
После добавления плагина сериализации я получаю эту ошибку:
"Не удается найти сериализатор без аргументов для класса OwnerMapper. Для общих классов, таких как списки, укажите сериализатор явно".
Я последовал официальному примеру, но не смог запустить его. Я использую Kotlin/Js и выше ошибка исходит из браузера.
2 ответа
val client = HttpClient() {
install(JsonFeature){
serializer = KotlinxSerializer()
}
}
@Serializable
data class OwnerLoginMapper(
val email: String? = null,
val username: String? = null,
val number: String? = null,
val credential: String
)
@Serializable
data class Token(
val token : String
)
var response = client.post<Token>(url){
contentType(ContentType.Application.Json)
body = ownerMapper
}
println(response.token)
Добавьте эти зависимости:
implementation("io.ktor:ktor-client-json-js:1.3.2")
implementation("io.ktor:ktor-client-serialization-js:1.3.2")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime-js:0.20.0")
Примените этот плагин:
kotlin("plugin.serialization") version "1.3.70"
PS: Выберите подходящий номер версии.
Ваш OwnerMapper
класс отмечен как @Serializable
?
Если нет - отметьте это как @Serializable
Если да - попробуйте воспроизвести вторую проблему ("Can't locate argument-less serializer for class OwnerMapper. For generic classes, such as lists, please provide serializer explicitly."
) без Ктора. На мой взгляд, это проблема с сериализацией, возможно, отсутствует какая-то зависимость.
Также обратите внимание на проблему с github: https://github.com/Kotlin/kotlinx.serialization/issues/278