Я новичок в Ktor, и в настоящее время я использую Быстрый старт http api, но я получаю сообщение об ошибке:
Ошибка приложения - необработано: GET - / snippets com.fasterxml.jackson.databind.JsonMappingException: kotlin.reflect.jvm.internal.KClassImpl нельзя преобразовать в kotlin.reflect.jvm.internal.KClassImpl (через цепочку ссылок: java.util.Collections $ Singleton Map ["snippets"] -> java.util.ArrayList [0])
КОД:
import com.fasterxml.jackson.databind.SerializationFeature
import io.ktor.application.*
import io.ktor.features.CallLogging
import io.ktor.features.ContentNegotiation
import io.ktor.features.DefaultHeaders
import io.ktor.jackson.jackson
import io.ktor.request.receive
import io.ktor.response.respond
import io.ktor.response.respondText
import io.ktor.routing.Routing
import io.ktor.routing.get
import io.ktor.routing.post
import io.ktor.routing.routing
import java.util.*
data class Snippet(val text: String)
val snippets = Collections.synchronizedList(mutableListOf(
Snippet("hello"),
Snippet("world")
))
fun Application.main() {
install(ContentNegotiation) {
jackson {
enable(SerializationFeature.INDENT_OUTPUT)
}
}
routing {
get("/snippets") {
call.respond(mapOf("snippets" to synchronized(snippets) { snippets.toList() }))
}
}
}
Если я использую это вместо:
call.respond(mapOf("snippets" to synchronized(snippets) { snippets.toString() }))
, возвращается:
{
"snippets" : "[Snippet(text=hello), Snippet(text=world)]"
}
но теперь он использует toString (), а не toList (), есть идеи, как заставить его работать, как при быстром запуске с использованием toList ()?