В приложении ktor я пытаюсь прочитать опубликованные параметры следующим образом:
val params = call.receiveParameters()
Но я столкнулся с этой ошибкой:
No Default Transformations found for class io.ktor.utils.io.ByteBufferChannel and expected type TypeInfo(type=class io.ktor.http.Parameters, reifiedType=interface io.ktor.http.Parameters, kotlinType=io.ktor.http.Parameters) for call /...
io.ktor.server.plugins.BadRequestException: Failed to convert request body to class io.ktor.http.Parameters
Я использую ktor 3.0.0-beta-1, а также установил согласование контента следующим образом:
install(ContentNegotiation) {
gson {}
json(Json {
prettyPrint = true
isLenient = true
ignoreUnknownKeys = true
})
}
И я отправляю POST-запрос в приложение следующим образом (используя Axios):
axios.post(
`http://127.0.0.1:8080/api/...`,
{
a:"1",
b:"2"
},{})
Поскольку я отправляю простые пары строковых ключей и значений, временно я использую приведенное ниже решение, и оно работает:
val paramsMap = call.receive<Map<String,String>>()
Как правильно решить эту проблему!?





getParameters предназначен для чтения данных формы — application/x-www-form-urlencoded или multipart/form-data. Я не особо знаком с аксиомами, но отправленный вами запрос, похоже, просто application/json.
Пример HTTP-запроса, который можно получить с помощью receiveParameters, можно найти здесь.
POST http://localhost:8080/signup Content-Type: application/x-www-form-urlencoded username=JetBrains&[email protected]&password=foobar&confirmation=foobar
Чтобы узнать, как отправить x-www-form-urlencoded с помощью axios, см. этот пост.
Если вы просто хотите отправить JSON, используйте receive правильный подход. Если ключи не динамические, рассмотрите возможность написания @Serializable data class для этого запроса вместо его десериализации в Map.
@ucMedia Первые две ссылки в моем ответе — это ссылки на документацию, объясняющую, как работает receiveParameters.
Спасибо, это решение! Но я не могу найти ни одного упомянутого документа
receiveParametersпросто работает с данными формы! Откуда ты это узнал!?