This message was deleted.
# serialization
s
This message was deleted.
o
build.gradle.kts:
Copy code
plugins {
    alias(libs.plugins.kotlin.jvm) //2.0.0
    alias(libs.plugins.kotlin.serialization) //2.0.0
    alias(libs.plugins.ktor) //2.3.12
    id("org.graalvm.buildtools.native") version "0.10.1" // Add GraalVM plugin
}

application {
    mainClass.set("com.xx.xx.MainKt")
}

repositories {
    mavenCentral()
}

dependencies {
    implementation(libs.bundles.ktor)

}

graalvmNative {
    binaries {
        named("main") {
            fallback.set(false)
            verbose.set(true)

            buildArgs.add("--initialize-at-build-time=ch.qos.logback")
            buildArgs.add("--initialize-at-build-time=io.ktor")
            buildArgs.add("--initialize-at-build-time=kotlin")
            buildArgs.add("--initialize-at-build-time=org.slf4j.LoggerFactory")

            buildArgs.add("-H:+InstallExitHandlers")
            buildArgs.add("-H:+ReportUnsupportedElementsAtRuntime")
            buildArgs.add("-H:+ReportExceptionStackTraces")
            resources.autodetect()

            imageName.set("graalvm_server")
        }
        metadataRepository {
            enabled.set(true)
        }
    }
}

kotlin {
    jvmToolchain(17)
}

tasks {
    compileKotlin {
        kotlinOptions {
            freeCompilerArgs = listOf("-Xcontext-receivers")
        }
    }
}
Main.kt:
Copy code
import io.ktor.http.*
import io.ktor.serialization.kotlinx.json.*
import io.ktor.server.application.*
import io.ktor.server.engine.*
import io.ktor.server.cio.*
import io.ktor.server.plugins.contentnegotiation.*
import io.ktor.server.request.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.JsonObject

@Serializable
data class MyClass(val string: String)

fun main() {
    embeddedServer(CIO, port = 8080) {
        install(ContentNegotiation) {
            json()
        }

        routing {
            post("/") {
//                val model = call.receive<MyClass>() ?: return@post //Works!
                val model = call.receive<JsonObject>()
                call.respond(HttpStatusCode.OK, model)
            }
        }
    }.start(wait = true)
}