Kotlin Ktor 尝试在客户端安装 JsonFeature 但无法识别

ori*_*rie 3 plugins serialization json kotlin ktor

我正在使用 Ktor 客户端,并尝试使用框架提供的序列化来实现发布请求。

由于某些奇怪的原因,添加序列化可以在服务器端工作,但不能在客户端工作。

摇篮

plugins {
    application
    kotlin("jvm") version "1.6.10"
    id("org.jetbrains.kotlin.plugin.serialization") version "1.6.10"
}

repositories {
    mavenCentral()
    maven { url = uri("https://maven.pkg.jetbrains.space/public/p/ktor/eap") }
}

dependencies {
    // Ktor server
    implementation("io.ktor:ktor-server-core-jvm:$ktor_version")
    implementation("io.ktor:ktor-server-content-negotiation-jvm:$ktor_version")
    implementation("io.ktor:ktor-serialization-kotlinx-json-jvm:$ktor_version")
    implementation("io.ktor:ktor-server-netty-jvm:$ktor_version")

    // Ktor client
    implementation("io.ktor:ktor-client-core:$ktor_version")
    implementation("io.ktor:ktor-client-cio:$ktor_version")
    implementation("io.ktor:ktor-client-json:$ktor_version")
    implementation("io.ktor:ktor-client-serialization:$ktor_version")

    // Arrow
    implementation("io.arrow-kt:arrow-core:1.0.1")

    // Tests
    implementation("ch.qos.logback:logback-classic:$logback_version")
    testImplementation("io.ktor:ktor-server-tests-jvm:$ktor_version")
    testImplementation("org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version")
}
Run Code Online (Sandbox Code Playgroud)

在我的客户端

import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.*
import io.ktor.client.request.*
import io.ktor.client.statement.*
import io.ktor.http.*
import io.ktor.util.*
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import kotlinx.serialization.*

@Serializable
data class TastyCredentials(val login: String, val password: String)

@OptIn(InternalAPI::class)
class TastyWorksBroker() : Broker {

    companion object {
        val client = HttpClient(CIO) {
            install(JsonFeature) // JsonFeature is not recognized by IntelliJ

            defaultRequest {
                url(baseUrl)
                contentType(ContentType.Application.Json)

            }
        }
    }

    override suspend fun connect(): Boolean {
        val response: HttpResponse = client.post("/sessions") {
            body = TastyCredentials(login, password)
        }

        //
    }
Run Code Online (Sandbox Code Playgroud)

install(JsonFeature) 不起作用,我也尝试过这个:

install(ContentNegotiation) {
                json()
            }
Run Code Online (Sandbox Code Playgroud)

也不起作用...

有什么帮助吗?

ori*_*rie 13

我实际上需要为客户端内容协商添加另一个依赖项

implementation("io.ktor:ktor-client-content-negotiation:$ktor_version")

解决了