Slackbot
06/30/2024, 7:59 AMOfek Teken
06/30/2024, 8:00 AMplugins {
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")
}
}
}
Ofek Teken
06/30/2024, 8:01 AMimport 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)
}