I get "kotlinx/coroutines/io/ByteReadChannel" when I try to decode a json on server side with ktor and moshi

772 views Asked by At

In Application.kt I install moshi in Application.module

   install(ContentNegotiation){
        moshi()
    }

I declared a simple test calss and in the route I try to decode the test class:

data class Test(val testString: String)

fun Route.test() {
    post (TEST_ENDPOINT) {
        val testReceive = call.receive<Test>()
        call.respond(testReceive)
    }

The request is post with the following Headers and Body:

Accept: */*
Accept-Encoding: gzip, deflate
Content-Type: application/json
Accept-Language: en-gb

{
  "testString": "dasdada"
}

Response headers:

HTTP/1.1 500 Internal Server Error

Date: Mon, 05 Oct 2020 11:55:58 GMT
Content-Length: 37
Connection: keep-alive
Content-Type: text/plain; charset=UTF-8
Server: ktor-server-core/1.4.1 ktor-server-core/1.4.1

Response body:

kotlinx/coroutines/io/ByteReadChannel

Any suggestion or comment is appreciated.

1

There are 1 answers

0
Михаил Нафталь On BEST ANSWER

Moshi 1.0.1 relies on some outdated Ktor API. Consider either moving back to Ktor 1.3.2 or (better) use another JSON handler (there are several available out of the box: Gson, Jackson and kotlinx.serialization)