Máy chủ Ktor phản hồi với lỗi 406 trong người đưa thư

lập trình


Tôi đang làm một máy chủ phụ trợ và tôi gặp một số sự cố khi kiểm tra/đăng ký lộ trình. Tôi nghĩ rằng tôi đã định cấu hình mọi thứ chính xác nhưng nó báo lỗi 406 khi tôi thử thực hiện phương thức POST trên Postman, đây là liên kết mà tôi đang sử dụng `http://127.0.0.1:8080/v1/users/register’ Cái này tôi đã kết nối với PostGreSQL DB, sau khi thực hiện yêu cầu trên Postman, tôi thậm chí đã kiểm tra cơ sở dữ liệu, nhưng không có gì ở đó cả, trước phần định tuyến này, tôi đã tạo một bảng bằng Ktor.

Đây là tập tin lộ trình của tôi

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

Đăng ký lớp học

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

Lớp SimpleResponse

Kotlin
package com.example.data.model

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

Và khi tôi cố gắng gửi POST trên POSTMAN thì đây là nội dung xuất hiện trên bảng điều khiển của tôi trong IntelliJ

Phần cuối
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)

nội dung theo yêu cầu là thế này

{
“tên”: “john”,
“email”: “abcd@gmail.com”,
“mật khẩu”: “vượt qua”
}

Kotlin
fun Application.configureSerialization() {

    install(ContentNegotiation) {

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

    }

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

Những gì tôi đã thử:

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

Giải pháp 1

Tôi hoàn toàn không biết về Kotlin, nhưng có vẻ như bạn đang gặp một ngoại lệ nhưng hoàn toàn bỏ qua nó, chỉ trả lời chung chung:

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

Hãy thử quay lại hoặc đăng nhập vào đâu đó thông báo ngoại lệ để bạn hiểu rõ hơn về ngoại lệ đang phàn nàn.

コメント

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