يستجيب خادم Ktor بخطأ 406 في ساعي البريد


أقوم بإنشاء خادم خلفي وأواجه بعض المشاكل أثناء اختبار/تسجيل المسار. أعتقد أنني قمت بتكوين كل شيء بشكل صحيح ولكنه يعطيني الخطأ 406 عندما أحاول تنفيذ طريقة POST على Postman، هذا هو الرابط الذي أستخدمه ´http://127.0.0.1:8080/v1/users/register´ لقد قمت بالاتصال بقاعدة بيانات PostGreSQL، وبعد أن قمت بالطلب على Postman، قمت حتى بفحص قاعدة البيانات، ولكن لا يوجد شيء هناك، وقبل جزء التوجيه هذا، قمت بالفعل بإنشاء جدول باستخدام Ktor.

هذا هو ملف الطريق الخاص بي

كوتلين
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"))
            }
        }

سجل الفصل

كوتلين
data class RegisterRequest(
    val email:String,
    val name:String,
    val password:String
)

فئة الاستجابة البسيطة

كوتلين
package com.example.data.model

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

وعندما أحاول إرسال POST على POSTMAN، فهذا ما يظهر على وحدة التحكم الخاصة بي في 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)

الجسم بناء على الطلب هو هذا

{
“الاسم”: “جون”،
“البريد الإلكتروني”: “abcd@gmail.com”،
“كلمة المرور”: “تمرير”
}

كوتلين
fun Application.configureSerialization() {

    install(ContentNegotiation) {

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

    }

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

ما حاولت:

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

الحل 1

لا أعرف Kotlin على الإطلاق، ولكن يبدو أنك تكتشف استثناءً ولكنك تتجاهله تمامًا، ولا تعيد سوى استجابة عامة:

كوتلين
} catch (e: Exception) {
    // Handle registration errors
    call.respond(HttpStatusCode.BadRequest, SimpleResponse(false, "Missing Some Fields or Registration Failed"))

حاول إعادة رسالة الاستثناء أو تسجيلها في مكان ما حتى تحصل على فكرة أفضل عما يشكو منه الاستثناء.

コメント

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