[ad_1]
Estoy haciendo un servidor backend y tengo algunos problemas al probar la ruta/registro. Creo que he configurado todo correctamente pero me da el error 406 cuando intento hacer un método POST en Postman este es el enlace que estoy usando ´http://127.0.0.1:8080/v1/users/register´ Esto lo conecté a una base de datos PostGreSQL, después de hacer la solicitud en Postman incluso revisé la base de datos, pero no hay nada allí, antes de esta parte de enrutamiento ya creé una tabla usando Ktor.
Este es mi archivo de ruta
fun Route.userRoutes(db: repo, jwtService: JwtService, hashFunction: (String) -> String) { route("/v1/users") { post("/register") { try { val registerRequest = call.receive<RegisterRequest>() // Handle registration logic 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) { // Handle registration errors call.respond(HttpStatusCode.BadRequest, SimpleResponse(false, "Missing Some Fields or Registration Failed")) } }
Registrar clase
data class RegisterRequest( val email:String, val name:String, val password:String )
Clase de respuesta simple
package com.example.data.model data class SimpleResponse( val success:Boolean, val message:String )
Y cuando intento enviar el POST en POSTMAN esto es lo que aparece en mi consola en 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)
el cuerpo de la solicitud es este
{
“nombre”: “juan”,
“correo electrónico”: “abcd@gmail.com”,
“contraseña”: “contraseña”
}
fun Application.configureSerialization() { install(ContentNegotiation) { Json { prettyPrint = true isLenient = true encodeDefaults = false } } routing { get("/json/gson") { call.respond(mapOf("hello" to "world")) } } }
Lo que he probado:
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
Solución 1
No conozco Kotlin en absoluto, pero parece que estás detectando una excepción pero la ignoras por completo y solo devuelves una respuesta genérica:
} catch (e: Exception) { // Handle registration errors call.respond(HttpStatusCode.BadRequest, SimpleResponse(false, "Missing Some Fields or Registration Failed"))
Intente devolver o registrar en algún lugar el mensaje de excepción para tener una mejor idea de qué se queja la excepción.
[ad_2]
コメント