Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 响应管道无法';使用gson-Ktor转换数据类_Kotlin_Ktor - Fatal编程技术网

Kotlin 响应管道无法';使用gson-Ktor转换数据类

Kotlin 响应管道无法';使用gson-Ktor转换数据类,kotlin,ktor,Kotlin,Ktor,我真的很抱歉,如果以前有人问过这个问题,我会在有人发布一个副本后立即删除它,但为什么失败了呢 package com.example import com.example.data.TestObject import io.ktor.application.* import io.ktor.response.* import io.ktor.request.* import io.ktor.client.* import io.ktor.client.engine.apache.* impor

我真的很抱歉,如果以前有人问过这个问题,我会在有人发布一个副本后立即删除它,但为什么失败了呢

package com.example

import com.example.data.TestObject
import io.ktor.application.*
import io.ktor.response.*
import io.ktor.request.*
import io.ktor.client.*
import io.ktor.client.engine.apache.*
import io.ktor.features.CallLogging
import io.ktor.features.Compression
import io.ktor.features.ContentNegotiation
import io.ktor.features.DefaultHeaders
import io.ktor.gson.gson
import io.ktor.http.ContentType
import io.ktor.routing.get
import io.ktor.routing.routing
import io.ktor.server.engine.embeddedServer
import io.ktor.server.netty.Netty
import java.text.DateFormat

fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args)

@kotlin.jvm.JvmOverloads
fun Application.module(testing: Boolean = false) {
    install(DefaultHeaders)
    install(Compression)
    install(CallLogging)
    install(ContentNegotiation) {
        gson {
            setDateFormat(DateFormat.LONG)
            setPrettyPrinting()
        }
    }

    val server = embeddedServer(Netty, port = 8080) {
        routing {
            get("/test") {
                val instance = TestObject()
                call.respond(instance)
            }
        }
    }
    server.start(true)
}
还有我的身材。格雷德尔:

buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

apply plugin: 'kotlin'
apply plugin: 'application'

group 'com.example'
version '0.0.1'
mainClassName = "io.ktor.server.netty.EngineMain"

sourceSets {
    main.kotlin.srcDirs = main.java.srcDirs = ['src']
    test.kotlin.srcDirs = test.java.srcDirs = ['test']
    main.resources.srcDirs = ['resources']
    test.resources.srcDirs = ['testresources']
}

repositories {
    mavenLocal()
    jcenter()
    maven { url 'https://kotlin.bintray.com/ktor' }
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    implementation "io.ktor:ktor-server-netty:$ktor_version"
    implementation "ch.qos.logback:logback-classic:$logback_version"
    implementation "io.ktor:ktor-client-core:$ktor_version"
    implementation "io.ktor:ktor-client-core-jvm:$ktor_version"
    implementation "io.ktor:ktor-client-apache:$ktor_version"
    implementation "io.ktor:ktor-gson:$ktor_version"
    testImplementation "io.ktor:ktor-server-tests:$ktor_version"
}
我得到的唯一例外是:

java.lang.IllegalArgumentException: Response pipeline couldn't transform 'class com.example.data.TestObject' to the OutgoingContent
    at io.ktor.server.engine.BaseApplicationResponse$Companion$setupSendPipeline$1.invokeSuspend(BaseApplicationResponse.kt:271)
    at io.ktor.server.engine.BaseApplicationResponse$Companion$setupSendPipeline$1.invoke(BaseApplicationResponse.kt)
    at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:268)
    at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(PipelineContext.kt:67)
    at io.ktor.util.pipeline.SuspendFunctionGun.proceed(PipelineContext.kt:141)
    at io.ktor.util.pipeline.SuspendFunctionGun.execute(PipelineContext.kt:161)
    at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:27)
    at com.example.ApplicationKt$module$server$1$1$1.invokeSuspend(Application.kt:48)
    at com.example.ApplicationKt$module$server$1$1$1.invoke(Application.kt)
    at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:268)
    at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(PipelineContext.kt:67)
    at io.ktor.util.pipeline.SuspendFunctionGun.proceed(PipelineContext.kt:141)
    at io.ktor.util.pipeline.SuspendFunctionGun.execute(PipelineContext.kt:161)
    at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:27)
    at io.ktor.routing.Routing.executeResult(Routing.kt:147)
    at io.ktor.routing.Routing.interceptor(Routing.kt:34)
    at io.ktor.routing.Routing$Feature$install$1.invokeSuspend(Routing.kt:99)
    at io.ktor.routing.Routing$Feature$install$1.invoke(Routing.kt)
项目确实在运行,我能够访问不同get请求的不同路径,但是使用Gson序列化我的响应似乎不起作用


非常感谢您的帮助,我几个小时前就开始了:)

我感觉您的模块配置正确,ktor可能不知道您已经为内容协商配置了gson。尝试在application.conf文件中指定。此外,同时使用embeddedServer和EngineMain也没有意义。使用其中一个,但不能同时使用两个。去掉模块中的嵌入式服务器,并在application.conf的modules属性中指定模块。达利曼我在这里有一个答案,但人们对此投了反对票,要么是因为它不正确,要么是出于恶意,我不确定:)当我移除嵌入式服务器时,它开始工作了。请随意写下来作为回答。我感觉您的模块配置正确,ktor可能不知道您已经为内容协商配置了gson。尝试在application.conf文件中指定。此外,同时使用embeddedServer和EngineMain也没有意义。使用其中一个,但不能同时使用两个。去掉模块中的嵌入式服务器,并在application.conf的modules属性中指定模块。达利曼我在这里有一个答案,但人们对此投了反对票,要么是因为它不正确,要么是出于恶意,我不确定:)当我移除嵌入式服务器时,它开始工作了。请随意写下来作为答案
java.lang.IllegalArgumentException: Response pipeline couldn't transform 'class com.example.data.TestObject' to the OutgoingContent
    at io.ktor.server.engine.BaseApplicationResponse$Companion$setupSendPipeline$1.invokeSuspend(BaseApplicationResponse.kt:271)
    at io.ktor.server.engine.BaseApplicationResponse$Companion$setupSendPipeline$1.invoke(BaseApplicationResponse.kt)
    at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:268)
    at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(PipelineContext.kt:67)
    at io.ktor.util.pipeline.SuspendFunctionGun.proceed(PipelineContext.kt:141)
    at io.ktor.util.pipeline.SuspendFunctionGun.execute(PipelineContext.kt:161)
    at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:27)
    at com.example.ApplicationKt$module$server$1$1$1.invokeSuspend(Application.kt:48)
    at com.example.ApplicationKt$module$server$1$1$1.invoke(Application.kt)
    at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:268)
    at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(PipelineContext.kt:67)
    at io.ktor.util.pipeline.SuspendFunctionGun.proceed(PipelineContext.kt:141)
    at io.ktor.util.pipeline.SuspendFunctionGun.execute(PipelineContext.kt:161)
    at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:27)
    at io.ktor.routing.Routing.executeResult(Routing.kt:147)
    at io.ktor.routing.Routing.interceptor(Routing.kt:34)
    at io.ktor.routing.Routing$Feature$install$1.invokeSuspend(Routing.kt:99)
    at io.ktor.routing.Routing$Feature$install$1.invoke(Routing.kt)