Emirhan Emmez
12/07/2021, 10:27 AMhandleRequest(<http://HttpMethod.Post|HttpMethod.Post>, "/login") {
addHeader(HttpHeaders.ContentType, ContentType.Application.Json.toString())
addHeader(HttpHeaders.Accept, ContentType.Application.Json.toString())
//setBody("{\"username\": \"emirhan\", \"password\": \"1234\"}")
setBody(listOf("username" to "emirhan", "password" to "1234").toString())
}
i'm receiving:
io.ktor.features.CannotTransformContentToTypeException: Cannot transform this request's content to com.emirhan.model.UserRequest
My data class UserRequest is like:
@Serializable
data class UserRequest(
val username: String,
var password: String
)
In route im receiving body like:
val userRequest = call.receive<UserRequest>()
setBody(Json.encodeToString(UserRequest("emirhan","1234")))
getting same errorhfhbd
12/07/2021, 10:34 AM[(username, emirhan), (password, 1234)]
, but you need this:
{
"username": "emirhan",
"password": 1234
}
. Why do you handle serialization yourself? How do you get this body normally?Emirhan Emmez
12/07/2021, 10:47 AMinstall(CallLogging) {
level = <http://Level.INFO|Level.INFO>
format {
val status = it.response.status()
val httpMethod = it.request.httpMethod.value
"Status: $status, HTTP method: $httpMethod"
}
filter { call -> call.request.path().startsWith("/") }
}
setBody(listOf("username" to "emirhan", "password" to "1234").formUrlEncode())
hfhbd
12/07/2021, 11:07 AM@Serializable
data class A(val s: String, val p: Int)
class Testing {
@Test
fun a() = withTestApplication({
install(ContentNegotiation) {
json()
}
install(CallLogging)
routing {
get("works") {
call.respondText("Works")
}
get("bam") {
error("BAM")
}
post("p") {
val body = call.receive<A>()
println(body)
call.respond(body)
}
}
}) {
val content = handleRequest(<http://HttpMethod.Post|HttpMethod.Post>, "p") {
addHeader(HttpHeaders.ContentType, ContentType.Application.Json.toString())
setBody(Json.encodeToString(A("a", 42)))
}.response.content
assertEquals("""{"s":"a","p":42}""", content)
}
}
Emirhan Emmez
12/07/2021, 11:09 AMhfhbd
12/07/2021, 11:10 AMEmirhan Emmez
12/07/2021, 11:14 AMhfhbd
12/07/2021, 11:17 AMEmirhan Emmez
12/07/2021, 11:31 AMimplementation("io.ktor:ktor-serialization:$ktor_version")
implementation("io.ktor:ktor-server-netty:$ktor_version")
testImplementation("io.ktor:ktor-server-tests:$ktor_version")
implementation("io.ktor:ktor-jackson:$ktor_version")
setBody(Json.encodeToString(UserRequest("emirhan", "1234")))
val userRequest = call.receive<UserRequest>()
hfhbd
12/07/2021, 11:46 AMtestModule
you don't call configureSerialization()
Jackson
and only use kotlinx.serialization
Emirhan Emmez
12/07/2021, 12:18 PM