본문 바로가기

Backend/Kotlin

Ktor Install Gson

Ktor Framework에서 개발한 API에서 Json을 응답하고 싶어요.

기본적으로 세팅이 되어있지 않아 Gson을 설치해줘야 하더라구요.

해결 방법은 간단해요.

 

설정되어 있지 않을 경우 routing 안의 API에서 List나 Object를 리턴하면 아래와 같은 오류를 접하실거에요.
Response pipeline couldn't transform 'class java.util.ArrayList' to the OutgoingContent

 

java.lang.IllegalArgumentException: Response pipeline couldn't transform 'class java.util.ArrayList' to the OutgoingContent
	at io.ktor.server.engine.BaseApplicationResponse$Companion$setupSendPipeline$1.invokeSuspend(BaseApplicationResponse.kt:311)
	at io.ktor.server.engine.BaseApplicationResponse$Companion$setupSendPipeline$1.invoke(BaseApplicationResponse.kt)
	at io.ktor.server.engine.BaseApplicationResponse$Companion$setupSendPipeline$1.invoke(BaseApplicationResponse.kt)
	at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:248)
	at io.ktor.util.pipeline.SuspendFunctionGun.proceed(SuspendFunctionGun.kt:116)
	at io.ktor.util.pipeline.SuspendFunctionGun.execute(SuspendFunctionGun.kt:136)
	at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:78)
	at com.example.application.RoutingKt$configureRouting$1$1.invokeSuspend(Routing.kt:34)
	at com.example.application.RoutingKt$configureRouting$1$1.invoke(Routing.kt)
	at com.example.application.RoutingKt$configureRouting$1$1.invoke(Routing.kt)

build.gradle.kts

implementation("io.ktor:ktor-gson:$ktor_version")

Application.kt

import com.example.application.configureRouting
import io.ktor.application.*
import io.ktor.features.*
import io.ktor.gson.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*

fun main() {
  embeddedServer(Netty, port = 8080, host = "0.0.0.0") {
    configureRouting()
    install(ContentNegotiation) {
      gson {
        setPrettyPrinting()
        disableHtmlEscaping()
      }
    }
  }.start(wait = true)
}

 

이제 잘 될거에요.

 

관련 가이드는 요기 Ktor 홈페이지의 가이드 문서에 있습니다.

https://ktor.io/docs/gson.html

 

Gson | Ktor

 

ktor.io