Le serveur Ktor répond avec une erreur 406 dans Postman

la programmation


Je fais un serveur backend et j’ai quelques problèmes lors du test de la route /register. Je pense que j’ai tout configuré correctement mais cela me donne l’erreur 406 lorsque j’essaie de faire une méthode POST sur Postman, c’est le lien que j’utilise ‘http://127.0.0.1:8080/v1/users/register’ Ceci, je me suis connecté à une base de données PostGreSQL, après avoir fait la requête sur Postman, j’ai même vérifié la base de données, mais il n’y a rien là-bas, avant cette partie de routage, j’ai déjà créé une table en utilisant Ktor.

Ceci est mon fichier d’itinéraire

Kotlin
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"))
            }
        }

Inscrire la classe

Kotlin
data class RegisterRequest(
    val email:String,
    val name:String,
    val password:String
)

Classe SimpleResponse

Kotlin
package com.example.data.model

data class SimpleResponse(
    val success:Boolean,
    val message:String
)

Et quand j’essaye d’envoyer le POST sur POSTMAN voici ce qui apparaît sur ma console dans IntelliJ

Terminal
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)

le corps sur la demande est-ce

{
“nom”: “john”,
“email”: “abcd@gmail.com”,
“mot de passe”: “passer”
}

Kotlin
fun Application.configureSerialization() {

    install(ContentNegotiation) {

            Json {
                prettyPrint = true
                isLenient = true
                encodeDefaults = false
            }

    }

    routing {
        get("/json/gson") {
            call.respond(mapOf("hello" to "world"))
        }
    }
}

Ce que j’ai essayé :

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

Solution 1

Je ne connais pas du tout Kotlin, mais il semble que vous interceptiez une exception mais que vous l’ignoriez complètement, ne renvoyant qu’une réponse générique :

Kotlin
} catch (e: Exception) {
    // Handle registration errors
    call.respond(HttpStatusCode.BadRequest, SimpleResponse(false, "Missing Some Fields or Registration Failed"))

Essayez de renvoyer ou de consigner quelque part le message d’exception afin d’avoir une meilleure idée de ce dont se plaint l’exception.

コメント

タイトルとURLをコピーしました