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
'Backend > Kotlin' 카테고리의 다른 글
Kotlin 랜덤 숫자 000000~999999 (0) | 2022.04.17 |
---|---|
Ktor Ktorm DB 연동 (매우 간단) (0) | 2021.12.02 |
Ktor Application 빌드 오류 시 (Shadow Plugin) (0) | 2021.11.12 |
Ktor Framework 프로젝트 생성 (0) | 2021.11.12 |