I am doing a backend server and I am having some trouble while testing /register route. I think that I have configured everything correctly but it gives me the 406 error when I try to do a POST method on Postman this is the link that I am using ´http://127.0.0.1:8080/v1/users/register´ This i connected to a PostGreSQL DB, after I do the request on Postman I even checked the database, but there is nothing there, before this routing part I already have created a table using Ktor.
This is my route file
fun Route.userRoutes(db: repo, jwtService: JwtService, hashFunction: (String) -> String) {
route("/v1/users") {
post("/register") {
try {
val registerRequest = call.receive<RegisterRequest>()
val user = User(registerRequest.email, hashFunction(registerRequest.password), registerRequest.name)
db.addUser(user)
call.respond(HttpStatusCode.OK, SimpleResponse(true, jwtService.generateToken(user)))
} catch (e: Exception) {
call.respond(HttpStatusCode.BadRequest, SimpleResponse(false, "Missing Some Fields or Registration Failed"))
}
}
Register class
data class RegisterRequest(
val email:String,
val name:String,
val password:String
)
SimpleResponse class
package com.example.data.model
data class SimpleResponse(
val success:Boolean,
val message:String
)
And when I try to send the POST on POSTMAN this is what appears on my console in IntelliJ
2023-12-29 21:42:28.514 [eventLoopGroupProxy-4-1] TRACE io.ktor.server.routing.Routing - Trace for [v1, users, register]
/, segment:0 -> SUCCESS @ /
/session, segment:0 -> FAILURE "Selector didn't match" @ /session
/json, segment:0 -> FAILURE "Selector didn't match" @ /json
/, segment:0 -> SUCCESS @ /
/(method:GET), segment:0 -> FAILURE "Selector didn't match" @ /(method:GET)
/v1, segment:1 -> SUCCESS @ /v1
/v1/users, segment:2 -> SUCCESS @ /v1/users
/v1/users/register, segment:3 -> SUCCESS @ /v1/users/register
/v1/users/register/(method:POST), segment:3 -> SUCCESS @ /v1/users/register/(method:POST)
/v1/users/login, segment:2 -> FAILURE "Selector didn't match" @ /v1/users/login
Matched routes:
"" -> "v1" -> "users" -> "register" -> "(method:POST)"
Route resolve result:
SUCCESS @ /v1/users/register/(method:POST)
2023-12-30 21:04:26.349 [eventLoopGroupProxy-4-1] TRACE i.k.server.engine.DefaultTransform - No Default Transformations found for class io.ktor.utils.io.ByteBufferChannel and expected type TypeInfo(type=class com.example.data.model.RegisterRequest, reifiedType=class com.example.data.model.RegisterRequest, kotlinType=com.example.data.model.RegisterRequest) for call /v1/users/register
2023-12-30 21:04:26.375 [eventLoopGroupProxy-4-1] TRACE i.k.s.p.c.ContentNegotiation - No suitable content converter found for request type class com.example.data.model.RegisterRequest
2023-12-30 21:04:26.384 [eventLoopGroupProxy-4-1] TRACE io.ktor.server.sessions.Sessions - Sending session data for /v1/users/register: MY_SESSION
2023-12-30 21:04:26.407 [eventLoopGroupProxy-4-1] TRACE i.k.s.p.c.ContentNegotiation - No suitable content converter found for response type class com.example.data.model.SimpleResponse and body SimpleResponse(success=false, message=Missing Some Fields)
the body on the request is this
{
"name": "john",
"email": "abcd@gmail.com",
"password": "pass"
}
fun Application.configureSerialization() {
install(ContentNegotiation) {
Json {
prettyPrint = true
isLenient = true
encodeDefaults = false
}
}
routing {
get("/json/gson") {
call.respond(mapOf("hello" to "world"))
}
}
}
What I have tried:
I have checked the headers tab on Postman and I have the Content-Type application/json and also the Accept "/"
The dependencies on Gradle I used latest.release
This is just for a simple Note App for android.
The problem seems to be because the RegisterRequest and SimpleResponse I think.
This is my first time using Ktor so sorry if I'm a bit behind in some aspects. Thank you for your time