Server Ktor merespons dengan kesalahan 406 di tukang pos

pemrograman


Saya sedang mengerjakan server backend dan saya mengalami masalah saat menguji/mendaftarkan rute. Saya pikir saya telah mengkonfigurasi semuanya dengan benar tetapi saya mendapat kesalahan 406 ketika saya mencoba melakukan metode POST di Tukang Pos. Ini adalah tautan yang saya gunakan ´http://127.0.0.1:8080/v1/users/register´ Ini saya sambungkan ke DB PostGreSQL, setelah saya melakukan permintaan pada Tukang Pos saya bahkan memeriksa database, tetapi tidak ada apa-apa di sana, sebelum bagian perutean ini saya sudah membuat tabel menggunakan Ktor.

Ini adalah file rute saya

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

Daftarkan kelas

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

kelas SimpleResponse

Kotlin
package com.example.data.model

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

Dan ketika saya mencoba mengirim POST di POSTMAN inilah yang muncul di konsol saya di 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)

isi permintaannya adalah ini

{
“nama”: “john”,
“email”: “abcd@gmail.com”,
“kata sandi”: “lulus”
}

Kotlin
fun Application.configureSerialization() {

    install(ContentNegotiation) {

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

    }

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

Apa yang saya coba:

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

Solusi 1

Saya tidak tahu Kotlin sama sekali, tapi sepertinya Anda menangkap pengecualian tetapi mengabaikannya sama sekali, hanya mengembalikan respons umum:

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

Coba kembalikan, atau catat di suatu tempat, pesan pengecualian sehingga Anda mendapatkan gambaran yang lebih baik tentang apa yang dikeluhkan oleh pengecualian tersebut.

コメント

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