我得到;kotlinx/coroutines/io/ByteReadChannel“的;当我试图用ktor和moshi在服务器端解码json时

我得到;kotlinx/coroutines/io/ByteReadChannel“的;当我试图用ktor和moshi在服务器端解码json时,kotlin,server,ktor,moshi,Kotlin,Server,Ktor,Moshi,在Application.kt中,我在Application.module中安装moshi install(ContentNegotiation){ moshi() } 我声明了一个简单的测试CALS,并在路由中尝试解码测试类: data class Test(val testString: String) fun Route.test() { post (TEST_ENDPOINT) { val testReceive = call.r

在Application.kt中,我在Application.module中安装moshi

   install(ContentNegotiation){
        moshi()
    }
我声明了一个简单的测试CALS,并在路由中尝试解码测试类:

data class Test(val testString: String)

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

响应标题:

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
答复机构:

kotlinx/coroutines/io/ByteReadChannel

欢迎提出任何建议或意见。

Moshi 1.0.1依赖于一些过时的Ktor API。
考虑移动到KTor 1.3.2或(更好)使用另一个JSON处理程序(有几个可供使用的框:和)/P>该问题似乎在服务器端,因为服务器用<代码> 500 < /代码>错误代码进行响应。您可能没有打印响应正文,而只是打印类的调试表示(例如
toString()
)。因此,它打印出的是类型,而不是内容。@KenVanHoeylandt,好的,我理解,但即使我使用像call.respond(“test”)这样的硬编码字符串进行响应,我也会得到同样的错误。我相信问题出在val testReceive=call.receive()上,但我不知道问题出在哪里。由于后端不断出现故障,因此响应失败。问题出在后端。关于响应是
kotlinx/coroutines/io/ByteReadChannel
:这只是您在代码中错误地读取了响应。您可以使用
copyTo()
copyAndClose()
将其转换为流,然后再转换为字符串。代码在后端运行,并从其他客户端接收请求。我搬到了格森,这似乎奏效了。我会发布一个答案。
kotlinx/coroutines/io/ByteReadChannel